PageRenderTime 55ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/tags/OpenSLP_0-9-0/openslp/slptool/slptool.c

#
C | 535 lines | 399 code | 63 blank | 73 comment | 81 complexity | ee582f2eac9dbdd6fb54688dff7e9f28 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. int ParseCommandLine(int argc,char* argv[], SLPToolCommandLine* cmdline)
  259. /* Returns Zero on success. Non-zero on error. */
  260. /*=========================================================================*/
  261. {
  262. int i;
  263. if(argc < 2)
  264. {
  265. /* not enough arguments */
  266. return 1;
  267. }
  268. for (i=1;i<argc;i++)
  269. {
  270. if( strcasecmp(argv[i],"-v") == 0 ||
  271. strcasecmp(argv[i],"--version") == 0 )
  272. {
  273. if(i < argc)
  274. {
  275. cmdline->cmd = PRINT_VERSION;
  276. return 0;
  277. }
  278. else
  279. {
  280. return 1;
  281. }
  282. }
  283. else if( strcasecmp(argv[i],"-s") == 0 ||
  284. strcasecmp(argv[i],"--scopes") == 0 )
  285. {
  286. i++;
  287. if(i < argc)
  288. {
  289. cmdline->scopes = argv[i];
  290. }
  291. else
  292. {
  293. return 1;
  294. }
  295. }
  296. else if( strcasecmp(argv[i],"-l") == 0 ||
  297. strcasecmp(argv[i],"--lang") == 0 )
  298. {
  299. i++;
  300. if(i < argc)
  301. {
  302. cmdline->lang = argv[i];
  303. }
  304. else
  305. {
  306. return 1;
  307. }
  308. }
  309. else if(strcasecmp(argv[i],"findsrvs") == 0)
  310. {
  311. cmdline->cmd = FINDSRVS;
  312. /* service type */
  313. i++;
  314. if(i < argc)
  315. {
  316. cmdline->cmdparam1 = argv[i];
  317. }
  318. else
  319. {
  320. return 1;
  321. }
  322. /* (optional) filter */
  323. i++;
  324. if(i < argc)
  325. {
  326. cmdline->cmdparam2 = argv[i];
  327. }
  328. break;
  329. }
  330. else if(strcasecmp(argv[i],"findattrs") == 0)
  331. {
  332. cmdline->cmd = FINDATTRS;
  333. /* url or service type */
  334. i++;
  335. if(i < argc)
  336. {
  337. cmdline->cmdparam1 = argv[i];
  338. }
  339. else
  340. {
  341. return 1;
  342. }
  343. /* (optional) attrids */
  344. i++;
  345. if(i < argc)
  346. {
  347. cmdline->cmdparam2 = argv[i];
  348. }
  349. }
  350. else if(strcasecmp(argv[i],"findsrvtypes") == 0)
  351. {
  352. cmdline->cmd = FINDSRVTYPES;
  353. /* (optional) naming authority */
  354. i++;
  355. if(i < argc)
  356. {
  357. cmdline->cmdparam1 = argv[i];
  358. }
  359. }
  360. else if(strcasecmp(argv[i],"findscopes") == 0)
  361. {
  362. cmdline->cmd = FINDSCOPES;
  363. }
  364. else if(strcasecmp(argv[i],"register") == 0)
  365. {
  366. cmdline->cmd = REGISTER;
  367. /* url */
  368. i++;
  369. if(i < argc)
  370. {
  371. cmdline->cmdparam1 = argv[i];
  372. }
  373. else
  374. {
  375. return 1;
  376. }
  377. /* attrids */
  378. i++;
  379. if(i < argc)
  380. {
  381. cmdline->cmdparam2 = argv[i];
  382. }
  383. else
  384. {
  385. return 1;
  386. }
  387. break;
  388. }
  389. else if(strcasecmp(argv[i],"deregister") == 0)
  390. {
  391. cmdline->cmd = DEREGISTER;
  392. /* url */
  393. i++;
  394. if(i < argc)
  395. {
  396. cmdline->cmdparam1 = argv[i];
  397. }
  398. else
  399. {
  400. return 1;
  401. }
  402. }
  403. else
  404. {
  405. return 1;
  406. }
  407. }
  408. return 0;
  409. }
  410. /*=========================================================================*/
  411. void DisplayUsage()
  412. /*=========================================================================*/
  413. {
  414. printf("Usage: slptool [options] command-and-arguments \n");
  415. printf(" options may be:\n");
  416. printf(" -v (or --version) displays version of slptool and OpenSLP\n");
  417. printf(" -s (or --scope) followed by a comma separated list of scopes\n");
  418. printf(" -l (or --language) followed by a language tag\n");
  419. printf(" command-and-arguments may be:\n");
  420. printf(" findsrvs service-type [filter]\n");
  421. printf(" findattrs url [attrids]\n");
  422. printf(" findsrvtypes [authority]\n");
  423. printf(" findscopes\n");
  424. printf(" register url attrs\n");
  425. printf(" deregister url attrs\n");
  426. printf(" getproperty propertyname\n");
  427. }
  428. /*=========================================================================*/
  429. int main(int argc, char* argv[])
  430. /*=========================================================================*/
  431. {
  432. int result;
  433. SLPToolCommandLine cmdline;
  434. /* zero out the cmdline */
  435. memset(&cmdline,0,sizeof(cmdline));
  436. /* Parse the command line */
  437. if(ParseCommandLine(argc,argv,&cmdline) == 0)
  438. {
  439. switch(cmdline.cmd)
  440. {
  441. case FINDSRVS:
  442. FindSrvs(&cmdline);
  443. break;
  444. case FINDATTRS:
  445. FindAttrs(&cmdline);
  446. break;
  447. case FINDSRVTYPES:
  448. FindSrvTypes(&cmdline);
  449. break;
  450. case FINDSCOPES:
  451. FindScopes(&cmdline);
  452. break;
  453. case GETPROPERTY:
  454. // GetProperty(&cmdline);
  455. break;
  456. case REGISTER:
  457. Register(&cmdline);
  458. break;
  459. case DEREGISTER:
  460. Deregister(&cmdline);
  461. break;
  462. case PRINT_VERSION:
  463. PrintVersion(&cmdline);
  464. }
  465. }
  466. else
  467. {
  468. DisplayUsage();
  469. result = 1;
  470. }
  471. return 0;
  472. }