PageRenderTime 39ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/tags/merged_1-0-2/openslp/slptool/slptool.c

#
C | 570 lines | 429 code | 67 blank | 74 comment | 86 complexity | f47b247ac88504d88d4a49218d5f94aa MD5 | raw file
Possible License(s): BSD-3-Clause, MPL-2.0-no-copyleft-exception, LGPL-2.1
  1. /***************************************************************************/
  2. /* */
  3. /* Project: OpenSLP command line UA wrapper */
  4. /* */
  5. /* File: slptool.c */
  6. /* */
  7. /* Abstract: Command line wrapper for OpenSLP */
  8. /* */
  9. /* Requires: OpenSLP installation */
  10. /* */
  11. /* Author(s): Matt Peterson <mpeterson@caldera.com> */
  12. /* */
  13. /* Copyright (c) 1995, 1999 Caldera Systems, Inc. */
  14. /* */
  15. /* This program is free software; you can redistribute it and/or modify it */
  16. /* under the terms of the GNU Lesser General Public License as published */
  17. /* by the Free Software Foundation; either version 2.1 of the License, or */
  18. /* (at your option) any later version. */
  19. /* */
  20. /* This program is distributed in the hope that it will be useful, */
  21. /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
  22. /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
  23. /* GNU Lesser General Public License for more details. */
  24. /* */
  25. /* You should have received a copy of the GNU Lesser General Public */
  26. /* License along with this program; see the file COPYING. If not, */
  27. /* please obtain a copy from http://www.gnu.org/copyleft/lesser.html */
  28. /* */
  29. /*-------------------------------------------------------------------------*/
  30. /* */
  31. /* Please submit patches to maintainer of http://www.openslp.org */
  32. /* */
  33. /***************************************************************************/
  34. #include "slptool.h"
  35. /*=========================================================================*/
  36. SLPBoolean mySrvTypeCallback( SLPHandle hslp,
  37. const char* srvtypes,
  38. SLPError errcode,
  39. void* cookie )
  40. /*=========================================================================*/
  41. {
  42. char* cpy;
  43. char* slider1;
  44. char* slider2;
  45. if(errcode == SLP_OK && *srvtypes)
  46. {
  47. cpy = strdup(srvtypes);
  48. if(cpy)
  49. {
  50. slider1 = slider2 = cpy;
  51. slider1 = strchr(slider2,',');
  52. while(slider1)
  53. {
  54. *slider1 = 0;
  55. printf("%s\n",slider2);
  56. slider1 ++;
  57. slider2 = slider1;
  58. slider1 = strchr(slider2,',');
  59. }
  60. /* print the final itam */
  61. printf("%s\n",slider2);
  62. free(cpy);
  63. }
  64. }
  65. return SLP_TRUE;
  66. }
  67. /*=========================================================================*/
  68. void FindSrvTypes(SLPToolCommandLine* cmdline)
  69. /*=========================================================================*/
  70. {
  71. SLPError result;
  72. SLPHandle hslp;
  73. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  74. {
  75. if(cmdline->cmdparam1)
  76. {
  77. result = SLPFindSrvTypes(hslp,
  78. cmdline->cmdparam1,
  79. cmdline->scopes,
  80. mySrvTypeCallback,
  81. 0);
  82. }
  83. else
  84. {
  85. result = SLPFindSrvTypes(hslp,
  86. "*",
  87. cmdline->scopes,
  88. mySrvTypeCallback,
  89. 0);
  90. }
  91. if(result != SLP_OK)
  92. {
  93. printf("errorcode: %i\n",result);
  94. }
  95. SLPClose(hslp);
  96. }
  97. }
  98. /*=========================================================================*/
  99. SLPBoolean myAttrCallback(SLPHandle hslp,
  100. const char* attrlist,
  101. SLPError errcode,
  102. void* cookie )
  103. /*=========================================================================*/
  104. {
  105. if(errcode == SLP_OK)
  106. {
  107. printf("%s\n",attrlist);
  108. }
  109. return SLP_TRUE;
  110. }
  111. /*=========================================================================*/
  112. void FindAttrs(SLPToolCommandLine* cmdline)
  113. /*=========================================================================*/
  114. {
  115. SLPError result;
  116. SLPHandle hslp;
  117. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  118. {
  119. result = SLPFindAttrs(hslp,
  120. cmdline->cmdparam1,
  121. cmdline->scopes,
  122. cmdline->cmdparam2,
  123. myAttrCallback,
  124. 0);
  125. if(result != SLP_OK)
  126. {
  127. printf("errorcode: %i\n",result);
  128. }
  129. SLPClose(hslp);
  130. }
  131. }
  132. /*=========================================================================*/
  133. SLPBoolean mySrvUrlCallback( SLPHandle hslp,
  134. const char* srvurl,
  135. unsigned short lifetime,
  136. SLPError errcode,
  137. void* cookie )
  138. /*=========================================================================*/
  139. {
  140. if(errcode == SLP_OK)
  141. {
  142. printf("%s,%i\n",srvurl,lifetime);
  143. }
  144. return SLP_TRUE;
  145. }
  146. /*=========================================================================*/
  147. void FindSrvs(SLPToolCommandLine* cmdline)
  148. /*=========================================================================*/
  149. {
  150. SLPError result;
  151. SLPHandle hslp;
  152. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  153. {
  154. result = SLPFindSrvs(hslp,
  155. cmdline->cmdparam1,
  156. cmdline->scopes,
  157. cmdline->cmdparam2,
  158. mySrvUrlCallback,
  159. 0);
  160. if(result != SLP_OK)
  161. {
  162. printf("errorcode: %i\n",result);
  163. }
  164. SLPClose(hslp);
  165. }
  166. }
  167. /*=========================================================================*/
  168. void FindScopes(SLPToolCommandLine* cmdline)
  169. /*=========================================================================*/
  170. {
  171. SLPError result;
  172. SLPHandle hslp;
  173. char* scopes;
  174. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  175. {
  176. result = SLPFindScopes(hslp,&scopes);
  177. if(result == SLP_OK)
  178. {
  179. printf("%s\n",scopes);
  180. SLPFree(scopes);
  181. }
  182. SLPClose(hslp);
  183. }
  184. }
  185. void mySLPRegReport(SLPHandle hslp, SLPError errcode, void* cookie)
  186. {
  187. if (errcode)
  188. printf("(de)registration errorcode %d\n", errcode);
  189. }
  190. /*=========================================================================*/
  191. void Register(SLPToolCommandLine* cmdline)
  192. /*=========================================================================*/
  193. {
  194. SLPError result;
  195. SLPHandle hslp;
  196. char srvtype[80] = "", *s;
  197. int len = 0;
  198. if (strncasecmp(cmdline->cmdparam1, "service:", 8) == 0)
  199. len = 8;
  200. s = strchr(cmdline->cmdparam1 + len, ':');
  201. if (!s)
  202. {
  203. printf("Invalid URL: %s\n", cmdline->cmdparam1);
  204. return;
  205. }
  206. len = s - cmdline->cmdparam1;
  207. strncpy(srvtype, cmdline->cmdparam1, len);
  208. srvtype[len] = 0;
  209. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  210. {
  211. result = SLPReg(hslp,
  212. cmdline->cmdparam1,
  213. SLP_LIFETIME_MAXIMUM,
  214. srvtype,
  215. cmdline->cmdparam2,
  216. SLP_TRUE,
  217. mySLPRegReport,
  218. 0);
  219. if(result != SLP_OK)
  220. {
  221. printf("errorcode: %i\n",result);
  222. }
  223. SLPClose(hslp);
  224. }
  225. }
  226. /*=========================================================================*/
  227. void Deregister(SLPToolCommandLine* cmdline)
  228. /*=========================================================================*/
  229. {
  230. SLPError result;
  231. SLPHandle hslp;
  232. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  233. {
  234. result = SLPDereg(hslp,
  235. cmdline->cmdparam1,
  236. mySLPRegReport,
  237. 0);
  238. if(result != SLP_OK)
  239. {
  240. printf("errorcode: %i\n",result);
  241. }
  242. SLPClose(hslp);
  243. }
  244. }
  245. /*=========================================================================*/
  246. void PrintVersion(SLPToolCommandLine* cmdline)
  247. /*=========================================================================*/
  248. {
  249. #ifdef WIN32
  250. printf("slptool version = %s\n",SLP_VERSION);
  251. #else
  252. printf("slptool version = %s\n",VERSION);
  253. #endif
  254. printf("OpenSLP version = %s\n",
  255. SLPGetProperty("net.slp.OpenSLPVersion"));
  256. }
  257. /*=========================================================================*/
  258. void GetProperty(SLPToolCommandLine* cmdline)
  259. /*=========================================================================*/
  260. {
  261. const char* propertyValue;
  262. propertyValue = SLPGetProperty(cmdline->cmdparam1);
  263. printf("%s = %s\n",
  264. cmdline->cmdparam1,
  265. propertyValue == 0 ? "" : propertyValue);
  266. }
  267. /*=========================================================================*/
  268. int ParseCommandLine(int argc,char* argv[], SLPToolCommandLine* cmdline)
  269. /* Returns Zero on success. Non-zero on error. */
  270. /*=========================================================================*/
  271. {
  272. int i;
  273. if(argc < 2)
  274. {
  275. /* not enough arguments */
  276. return 1;
  277. }
  278. for (i=1;i<argc;i++)
  279. {
  280. if( strcasecmp(argv[i],"-v") == 0 ||
  281. strcasecmp(argv[i],"--version") == 0 )
  282. {
  283. if(i < argc)
  284. {
  285. cmdline->cmd = PRINT_VERSION;
  286. return 0;
  287. }
  288. else
  289. {
  290. return 1;
  291. }
  292. }
  293. else if( strcasecmp(argv[i],"-s") == 0 ||
  294. strcasecmp(argv[i],"--scopes") == 0 )
  295. {
  296. i++;
  297. if(i < argc)
  298. {
  299. cmdline->scopes = argv[i];
  300. }
  301. else
  302. {
  303. return 1;
  304. }
  305. }
  306. else if( strcasecmp(argv[i],"-l") == 0 ||
  307. strcasecmp(argv[i],"--lang") == 0 )
  308. {
  309. i++;
  310. if(i < argc)
  311. {
  312. cmdline->lang = argv[i];
  313. }
  314. else
  315. {
  316. return 1;
  317. }
  318. }
  319. else if(strcasecmp(argv[i],"findsrvs") == 0)
  320. {
  321. cmdline->cmd = FINDSRVS;
  322. /* service type */
  323. i++;
  324. if(i < argc)
  325. {
  326. cmdline->cmdparam1 = argv[i];
  327. }
  328. else
  329. {
  330. return 1;
  331. }
  332. /* (optional) filter */
  333. i++;
  334. if(i < argc)
  335. {
  336. cmdline->cmdparam2 = argv[i];
  337. }
  338. break;
  339. }
  340. else if(strcasecmp(argv[i],"findattrs") == 0)
  341. {
  342. cmdline->cmd = FINDATTRS;
  343. /* url or service type */
  344. i++;
  345. if(i < argc)
  346. {
  347. cmdline->cmdparam1 = argv[i];
  348. }
  349. else
  350. {
  351. return 1;
  352. }
  353. /* (optional) attrids */
  354. i++;
  355. if(i < argc)
  356. {
  357. cmdline->cmdparam2 = argv[i];
  358. }
  359. }
  360. else if(strcasecmp(argv[i],"findsrvtypes") == 0)
  361. {
  362. cmdline->cmd = FINDSRVTYPES;
  363. /* (optional) naming authority */
  364. i++;
  365. if(i < argc)
  366. {
  367. cmdline->cmdparam1 = argv[i];
  368. }
  369. }
  370. else if(strcasecmp(argv[i],"findscopes") == 0)
  371. {
  372. cmdline->cmd = FINDSCOPES;
  373. }
  374. else if(strcasecmp(argv[i],"register") == 0)
  375. {
  376. cmdline->cmd = REGISTER;
  377. /* url */
  378. i++;
  379. if(i < argc)
  380. {
  381. cmdline->cmdparam1 = argv[i];
  382. }
  383. else
  384. {
  385. return 1;
  386. }
  387. /* Optional attrids */
  388. i++;
  389. if(i < argc)
  390. {
  391. cmdline->cmdparam2 = argv[i];
  392. }
  393. else
  394. {
  395. cmdline->cmdparam2 = cmdline->cmdparam1 + strlen(cmdline->cmdparam1);
  396. }
  397. break;
  398. }
  399. else if(strcasecmp(argv[i],"deregister") == 0)
  400. {
  401. cmdline->cmd = DEREGISTER;
  402. /* url */
  403. i++;
  404. if(i < argc)
  405. {
  406. cmdline->cmdparam1 = argv[i];
  407. }
  408. else
  409. {
  410. return 1;
  411. }
  412. }
  413. else if(strcasecmp(argv[i],"getproperty") == 0)
  414. {
  415. cmdline->cmd = GETPROPERTY;
  416. i++;
  417. if(i < argc)
  418. {
  419. cmdline->cmdparam1 = argv[i];
  420. }
  421. else
  422. {
  423. return 1;
  424. }
  425. }
  426. else
  427. {
  428. return 1;
  429. }
  430. }
  431. return 0;
  432. }
  433. /*=========================================================================*/
  434. void DisplayUsage()
  435. /*=========================================================================*/
  436. {
  437. printf("Usage: slptool [options] command-and-arguments \n");
  438. printf(" options may be:\n");
  439. printf(" -v (or --version) displays version of slptool and OpenSLP\n");
  440. printf(" -s (or --scope) followed by a comma separated list of scopes\n");
  441. printf(" -l (or --language) followed by a language tag\n");
  442. printf(" command-and-arguments may be:\n");
  443. printf(" findsrvs service-type [filter]\n");
  444. printf(" findattrs url [attrids]\n");
  445. printf(" findsrvtypes [authority]\n");
  446. printf(" findscopes\n");
  447. printf(" register url [attrs]\n");
  448. printf(" deregister url\n");
  449. printf(" getproperty propertyname\n");
  450. printf("Examples:\n");
  451. printf(" slptool register service:myserv.x://myhost.com \"(attr1=val1),(attr2=val2)\"\n");
  452. printf(" slptool findsrvs service:myserv.x\n");
  453. printf(" slptool findsrvs service:myserv.x \"(attr1=val1)\"\n");
  454. printf(" slptool findattrs service:myserv.x://myhost.com\n");
  455. printf(" slptool findattrs service:myserv.x://myhost.com attr1\n");
  456. printf(" slptool deregister service:myserv.x://myhost.com\n");
  457. printf(" slptool getproperty net.slp.useScopes\n");
  458. }
  459. /*=========================================================================*/
  460. int main(int argc, char* argv[])
  461. /*=========================================================================*/
  462. {
  463. int result;
  464. SLPToolCommandLine cmdline;
  465. /* zero out the cmdline */
  466. memset(&cmdline,0,sizeof(cmdline));
  467. /* Parse the command line */
  468. if(ParseCommandLine(argc,argv,&cmdline) == 0)
  469. {
  470. switch(cmdline.cmd)
  471. {
  472. case FINDSRVS:
  473. FindSrvs(&cmdline);
  474. break;
  475. case FINDATTRS:
  476. FindAttrs(&cmdline);
  477. break;
  478. case FINDSRVTYPES:
  479. FindSrvTypes(&cmdline);
  480. break;
  481. case FINDSCOPES:
  482. FindScopes(&cmdline);
  483. break;
  484. case GETPROPERTY:
  485. GetProperty(&cmdline);
  486. break;
  487. case REGISTER:
  488. Register(&cmdline);
  489. break;
  490. case DEREGISTER:
  491. Deregister(&cmdline);
  492. break;
  493. case PRINT_VERSION:
  494. PrintVersion(&cmdline);
  495. }
  496. }
  497. else
  498. {
  499. DisplayUsage();
  500. result = 1;
  501. }
  502. return 0;
  503. }