PageRenderTime 47ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/tags/OpenSLP_0-8-3/openslp/slptool/slptool.c

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