PageRenderTime 51ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/tags/2.0.beta2/openslp.contrib/slptool/slptool.c

#
C | 500 lines | 370 code | 61 blank | 69 comment | 76 complexity | f060c54e2f4fa210bf9aee33053a4904 MD5 | raw file
Possible License(s): BSD-3-Clause, MPL-2.0-no-copyleft-exception, LGPL-2.1
  1. /*-------------------------------------------------------------------------
  2. * Copyright (C) 2000 Caldera Systems, Inc
  3. * All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions
  7. * are met:
  8. *
  9. * Redistributions of source code must retain the above copyright
  10. * notice, this list of conditions and the following disclaimer.
  11. *
  12. * Redistributions in binary form must reproduce the above copyright
  13. * notice, this list of conditions and the following disclaimer in the
  14. * documentation and/or other materials provided with the distribution.
  15. *
  16. * Neither the name of Caldera Systems nor the names of its
  17. * contributors may be used to endorse or promote products derived
  18. * from this software without specific prior written permission.
  19. *
  20. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  21. * `AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  22. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  23. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE CALDERA
  24. * SYSTEMS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  25. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  26. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  27. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  28. * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  30. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31. *-------------------------------------------------------------------------*/
  32. #include "slptool.h"
  33. /*=========================================================================*/
  34. SLPBoolean mySrvTypeCallback( SLPHandle hslp,
  35. const char* srvtypes,
  36. SLPError errcode,
  37. void* cookie )
  38. /*=========================================================================*/
  39. {
  40. char* cpy;
  41. char* slider1;
  42. char* slider2;
  43. if(errcode == SLP_OK && *srvtypes)
  44. {
  45. cpy = strdup(srvtypes);
  46. if(cpy)
  47. {
  48. slider1 = slider2 = cpy;
  49. while(slider1 = strchr(slider2,','))
  50. {
  51. *slider1 = 0;
  52. printf("%s\n",slider2);
  53. slider1 ++;
  54. slider2 = slider1;
  55. }
  56. /* print the final itam */
  57. printf("%s\n",slider2);
  58. free(cpy);
  59. }
  60. }
  61. return SLP_TRUE;
  62. }
  63. /*=========================================================================*/
  64. void FindSrvTypes(SLPToolCommandLine* cmdline)
  65. /*=========================================================================*/
  66. {
  67. SLPError result;
  68. SLPHandle hslp;
  69. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  70. {
  71. if(cmdline->cmdparam1)
  72. {
  73. result = SLPFindSrvTypes(hslp,
  74. cmdline->cmdparam1,
  75. cmdline->scopes,
  76. mySrvTypeCallback,
  77. 0);
  78. }
  79. else
  80. {
  81. result = SLPFindSrvTypes(hslp,
  82. "*",
  83. cmdline->scopes,
  84. mySrvTypeCallback,
  85. 0);
  86. }
  87. if(result != SLP_OK)
  88. {
  89. printf("errorcode: %i\n",result);
  90. }
  91. SLPClose(hslp);
  92. }
  93. }
  94. /*=========================================================================*/
  95. SLPBoolean myAttrCallback(SLPHandle hslp,
  96. const char* attrlist,
  97. SLPError errcode,
  98. void* cookie )
  99. /*=========================================================================*/
  100. {
  101. if(errcode == SLP_OK)
  102. {
  103. printf("%s\n",attrlist);
  104. }
  105. return SLP_TRUE;
  106. }
  107. /*=========================================================================*/
  108. void FindAttrs(SLPToolCommandLine* cmdline)
  109. /*=========================================================================*/
  110. {
  111. SLPError result;
  112. SLPHandle hslp;
  113. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  114. {
  115. result = SLPFindAttrs(hslp,
  116. cmdline->cmdparam1,
  117. cmdline->scopes,
  118. cmdline->cmdparam2,
  119. myAttrCallback,
  120. 0);
  121. if(result != SLP_OK)
  122. {
  123. printf("errorcode: %i\n",result);
  124. }
  125. SLPClose(hslp);
  126. }
  127. }
  128. /*=========================================================================*/
  129. SLPBoolean mySrvUrlCallback( SLPHandle hslp,
  130. const char* srvurl,
  131. unsigned short lifetime,
  132. SLPError errcode,
  133. void* cookie )
  134. /*=========================================================================*/
  135. {
  136. if(errcode == SLP_OK)
  137. {
  138. printf("%s,%i\n",srvurl,lifetime);
  139. }
  140. return SLP_TRUE;
  141. }
  142. /*=========================================================================*/
  143. void FindSrvs(SLPToolCommandLine* cmdline)
  144. /*=========================================================================*/
  145. {
  146. SLPError result;
  147. SLPHandle hslp;
  148. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  149. {
  150. result = SLPFindSrvs(hslp,
  151. cmdline->cmdparam1,
  152. cmdline->scopes,
  153. cmdline->cmdparam2,
  154. mySrvUrlCallback,
  155. 0);
  156. if(result != SLP_OK)
  157. {
  158. printf("errorcode: %i\n",result);
  159. }
  160. SLPClose(hslp);
  161. }
  162. }
  163. /*=========================================================================*/
  164. void FindScopes(SLPToolCommandLine* cmdline)
  165. /*=========================================================================*/
  166. {
  167. SLPError result;
  168. SLPHandle hslp;
  169. char* scopes;
  170. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  171. {
  172. result = SLPFindScopes(hslp,&scopes);
  173. if(result == SLP_OK)
  174. {
  175. printf("%s\n",scopes);
  176. SLPFree(scopes);
  177. }
  178. SLPClose(hslp);
  179. }
  180. }
  181. void mySLPRegReport(SLPHandle hslp, SLPError errcode, void* cookie)
  182. {
  183. if (errcode)
  184. printf("(de)registration errorcode %d\n", errcode);
  185. }
  186. /*=========================================================================*/
  187. void Register(SLPToolCommandLine* cmdline)
  188. /*=========================================================================*/
  189. {
  190. SLPError result;
  191. SLPHandle hslp;
  192. char srvtype[80] = "", *s;
  193. int len = 0, callbackerr;
  194. if (strncasecmp(cmdline->cmdparam1, "service:", 8) == 0)
  195. len = 8;
  196. s = strchr(cmdline->cmdparam1 + len, ':');
  197. if (!s)
  198. {
  199. printf("Invalid URL: %s\n", cmdline->cmdparam1);
  200. return;
  201. }
  202. len = s - cmdline->cmdparam1;
  203. strncpy(srvtype, cmdline->cmdparam1, len);
  204. srvtype[len] = 0;
  205. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  206. {
  207. result = SLPReg(hslp,
  208. cmdline->cmdparam1,
  209. SLP_LIFETIME_MAXIMUM,
  210. srvtype,
  211. cmdline->cmdparam2,
  212. SLP_TRUE,
  213. mySLPRegReport,
  214. 0);
  215. if(result != SLP_OK)
  216. {
  217. printf("errorcode: %i\n",result);
  218. }
  219. SLPClose(hslp);
  220. }
  221. }
  222. /*=========================================================================*/
  223. void Deregister(SLPToolCommandLine* cmdline)
  224. /*=========================================================================*/
  225. {
  226. SLPError result;
  227. SLPHandle hslp;
  228. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  229. {
  230. result = SLPDereg(hslp,
  231. cmdline->cmdparam1,
  232. mySLPRegReport,
  233. 0);
  234. if(result != SLP_OK)
  235. {
  236. printf("errorcode: %i\n",result);
  237. }
  238. SLPClose(hslp);
  239. }
  240. }
  241. /*=========================================================================*/
  242. int ParseCommandLine(int argc,char* argv[], SLPToolCommandLine* cmdline)
  243. /* Returns Zero on success. Non-zero on error.
  244. /*=========================================================================*/
  245. {
  246. int i;
  247. if(argc < 2)
  248. {
  249. /* not enough arguments */
  250. return 1;
  251. }
  252. for (i=1;i<argc;i++)
  253. {
  254. if( strcasecmp(argv[i],"-s") == 0 ||
  255. strcasecmp(argv[i],"--scopes") == 0 )
  256. {
  257. i++;
  258. if(i < argc)
  259. {
  260. cmdline->scopes = argv[i];
  261. }
  262. else
  263. {
  264. return 1;
  265. }
  266. }
  267. else if( strcasecmp(argv[i],"-l") == 0 ||
  268. strcasecmp(argv[i],"--lang") == 0 )
  269. {
  270. i++;
  271. if(i < argc)
  272. {
  273. cmdline->lang = argv[i];
  274. }
  275. else
  276. {
  277. return 1;
  278. }
  279. }
  280. else if(strcasecmp(argv[i],"findsrvs") == 0)
  281. {
  282. cmdline->cmd = FINDSRVS;
  283. /* service type */
  284. i++;
  285. if(i < argc)
  286. {
  287. cmdline->cmdparam1 = argv[i];
  288. }
  289. else
  290. {
  291. return 1;
  292. }
  293. /* (optional) filter */
  294. i++;
  295. if(i < argc)
  296. {
  297. cmdline->cmdparam2 = argv[i];
  298. }
  299. break;
  300. }
  301. else if(strcasecmp(argv[i],"findattrs") == 0)
  302. {
  303. cmdline->cmd = FINDATTRS;
  304. /* url or service type */
  305. i++;
  306. if(i < argc)
  307. {
  308. cmdline->cmdparam1 = argv[i];
  309. }
  310. else
  311. {
  312. return 1;
  313. }
  314. /* (optional) attrids */
  315. i++;
  316. if(i < argc)
  317. {
  318. cmdline->cmdparam2 = argv[i];
  319. }
  320. }
  321. else if(strcasecmp(argv[i],"findsrvtypes") == 0)
  322. {
  323. cmdline->cmd = FINDSRVTYPES;
  324. /* (optional) naming authority */
  325. i++;
  326. if(i < argc)
  327. {
  328. cmdline->cmdparam1 = argv[i];
  329. }
  330. }
  331. else if(strcasecmp(argv[i],"findscopes") == 0)
  332. {
  333. cmdline->cmd = FINDSCOPES;
  334. }
  335. else if(strcasecmp(argv[i],"register") == 0)
  336. {
  337. cmdline->cmd = REGISTER;
  338. /* url */
  339. i++;
  340. if(i < argc)
  341. {
  342. cmdline->cmdparam1 = argv[i];
  343. }
  344. else
  345. {
  346. return 1;
  347. }
  348. /* attrids */
  349. i++;
  350. if(i < argc)
  351. {
  352. cmdline->cmdparam2 = argv[i];
  353. }
  354. else
  355. {
  356. return 1;
  357. }
  358. break;
  359. }
  360. else if(strcasecmp(argv[i],"deregister") == 0)
  361. {
  362. cmdline->cmd = DEREGISTER;
  363. /* url */
  364. i++;
  365. if(i < argc)
  366. {
  367. cmdline->cmdparam1 = argv[i];
  368. }
  369. else
  370. {
  371. return 1;
  372. }
  373. }
  374. else
  375. {
  376. return 1;
  377. }
  378. }
  379. return 0;
  380. }
  381. /*=========================================================================*/
  382. void DisplayUsage()
  383. /*=========================================================================*/
  384. {
  385. printf("Usage: slptool [options] command-and-arguments \n");
  386. printf(" options may be:\n");
  387. printf(" -s (or --scope) followed by a comma separated list of scopes\n");
  388. printf(" -l (or --language) followed by a language tag\n");
  389. printf(" command-and-arguments may be:\n");
  390. printf(" findsrvs service-type [filter]\n");
  391. printf(" findattrs url [attrids]\n");
  392. printf(" findsrvtypes [authority]\n");
  393. printf(" findscopes\n");
  394. printf(" register url attrs\n");
  395. printf(" deregister url attrs\n");
  396. }
  397. /*=========================================================================*/
  398. int main(int argc, char* argv[])
  399. /*=========================================================================*/
  400. {
  401. int result;
  402. SLPToolCommandLine cmdline;
  403. /* zero out the cmdline */
  404. memset(&cmdline,0,sizeof(cmdline));
  405. /* Parse the command line */
  406. if(ParseCommandLine(argc,argv,&cmdline) == 0)
  407. {
  408. switch(cmdline.cmd)
  409. {
  410. case FINDSRVS:
  411. FindSrvs(&cmdline);
  412. break;
  413. case FINDATTRS:
  414. FindAttrs(&cmdline);
  415. break;
  416. case FINDSRVTYPES:
  417. FindSrvTypes(&cmdline);
  418. break;
  419. case FINDSCOPES:
  420. FindScopes(&cmdline);
  421. break;
  422. case GETPROPERTY:
  423. // GetProperty(&cmdline);
  424. break;
  425. case REGISTER:
  426. Register(&cmdline);
  427. break;
  428. case DEREGISTER:
  429. Deregister(&cmdline);
  430. break;
  431. }
  432. }
  433. else
  434. {
  435. DisplayUsage();
  436. result = 1;
  437. }
  438. return 0;
  439. }