PageRenderTime 42ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

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

#
C | 502 lines | 370 code | 61 blank | 71 comment | 76 complexity | 0f623064881033795d5f606e7e851fbc 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. while(slider1 = strchr(slider2,','))
  52. {
  53. *slider1 = 0;
  54. printf("%s\n",slider2);
  55. slider1 ++;
  56. slider2 = slider1;
  57. }
  58. /* print the final itam */
  59. printf("%s\n",slider2);
  60. free(cpy);
  61. }
  62. }
  63. return SLP_TRUE;
  64. }
  65. /*=========================================================================*/
  66. void FindSrvTypes(SLPToolCommandLine* cmdline)
  67. /*=========================================================================*/
  68. {
  69. SLPError result;
  70. SLPHandle hslp;
  71. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  72. {
  73. if(cmdline->cmdparam1)
  74. {
  75. result = SLPFindSrvTypes(hslp,
  76. cmdline->cmdparam1,
  77. cmdline->scopes,
  78. mySrvTypeCallback,
  79. 0);
  80. }
  81. else
  82. {
  83. result = SLPFindSrvTypes(hslp,
  84. "*",
  85. cmdline->scopes,
  86. mySrvTypeCallback,
  87. 0);
  88. }
  89. if(result != SLP_OK)
  90. {
  91. printf("errorcode: %i\n",result);
  92. }
  93. SLPClose(hslp);
  94. }
  95. }
  96. /*=========================================================================*/
  97. SLPBoolean myAttrCallback(SLPHandle hslp,
  98. const char* attrlist,
  99. SLPError errcode,
  100. void* cookie )
  101. /*=========================================================================*/
  102. {
  103. if(errcode == SLP_OK)
  104. {
  105. printf("%s\n",attrlist);
  106. }
  107. return SLP_TRUE;
  108. }
  109. /*=========================================================================*/
  110. void FindAttrs(SLPToolCommandLine* cmdline)
  111. /*=========================================================================*/
  112. {
  113. SLPError result;
  114. SLPHandle hslp;
  115. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  116. {
  117. result = SLPFindAttrs(hslp,
  118. cmdline->cmdparam1,
  119. cmdline->scopes,
  120. cmdline->cmdparam2,
  121. myAttrCallback,
  122. 0);
  123. if(result != SLP_OK)
  124. {
  125. printf("errorcode: %i\n",result);
  126. }
  127. SLPClose(hslp);
  128. }
  129. }
  130. /*=========================================================================*/
  131. SLPBoolean mySrvUrlCallback( SLPHandle hslp,
  132. const char* srvurl,
  133. unsigned short lifetime,
  134. SLPError errcode,
  135. void* cookie )
  136. /*=========================================================================*/
  137. {
  138. if(errcode == SLP_OK)
  139. {
  140. printf("%s,%i\n",srvurl,lifetime);
  141. }
  142. return SLP_TRUE;
  143. }
  144. /*=========================================================================*/
  145. void FindSrvs(SLPToolCommandLine* cmdline)
  146. /*=========================================================================*/
  147. {
  148. SLPError result;
  149. SLPHandle hslp;
  150. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  151. {
  152. result = SLPFindSrvs(hslp,
  153. cmdline->cmdparam1,
  154. cmdline->scopes,
  155. cmdline->cmdparam2,
  156. mySrvUrlCallback,
  157. 0);
  158. if(result != SLP_OK)
  159. {
  160. printf("errorcode: %i\n",result);
  161. }
  162. SLPClose(hslp);
  163. }
  164. }
  165. /*=========================================================================*/
  166. void FindScopes(SLPToolCommandLine* cmdline)
  167. /*=========================================================================*/
  168. {
  169. SLPError result;
  170. SLPHandle hslp;
  171. char* scopes;
  172. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  173. {
  174. result = SLPFindScopes(hslp,&scopes);
  175. if(result == SLP_OK)
  176. {
  177. printf("%s\n",scopes);
  178. SLPFree(scopes);
  179. }
  180. SLPClose(hslp);
  181. }
  182. }
  183. void mySLPRegReport(SLPHandle hslp, SLPError errcode, void* cookie)
  184. {
  185. if (errcode)
  186. printf("(de)registration errorcode %d\n", errcode);
  187. }
  188. /*=========================================================================*/
  189. void Register(SLPToolCommandLine* cmdline)
  190. /*=========================================================================*/
  191. {
  192. SLPError result;
  193. SLPHandle hslp;
  194. char srvtype[80] = "", *s;
  195. int len = 0, callbackerr;
  196. if (strncasecmp(cmdline->cmdparam1, "service:", 8) == 0)
  197. len = 8;
  198. s = strchr(cmdline->cmdparam1 + len, ':');
  199. if (!s)
  200. {
  201. printf("Invalid URL: %s\n", cmdline->cmdparam1);
  202. return;
  203. }
  204. len = s - cmdline->cmdparam1;
  205. strncpy(srvtype, cmdline->cmdparam1, len);
  206. srvtype[len] = 0;
  207. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  208. {
  209. result = SLPReg(hslp,
  210. cmdline->cmdparam1,
  211. SLP_LIFETIME_MAXIMUM,
  212. srvtype,
  213. cmdline->cmdparam2,
  214. SLP_TRUE,
  215. mySLPRegReport,
  216. 0);
  217. if(result != SLP_OK)
  218. {
  219. printf("errorcode: %i\n",result);
  220. }
  221. SLPClose(hslp);
  222. }
  223. }
  224. /*=========================================================================*/
  225. void Deregister(SLPToolCommandLine* cmdline)
  226. /*=========================================================================*/
  227. {
  228. SLPError result;
  229. SLPHandle hslp;
  230. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  231. {
  232. result = SLPDereg(hslp,
  233. cmdline->cmdparam1,
  234. mySLPRegReport,
  235. 0);
  236. if(result != SLP_OK)
  237. {
  238. printf("errorcode: %i\n",result);
  239. }
  240. SLPClose(hslp);
  241. }
  242. }
  243. /*=========================================================================*/
  244. int ParseCommandLine(int argc,char* argv[], SLPToolCommandLine* cmdline)
  245. /* Returns Zero on success. Non-zero on error.
  246. /*=========================================================================*/
  247. {
  248. int i;
  249. if(argc < 2)
  250. {
  251. /* not enough arguments */
  252. return 1;
  253. }
  254. for (i=1;i<argc;i++)
  255. {
  256. if( strcasecmp(argv[i],"-s") == 0 ||
  257. strcasecmp(argv[i],"--scopes") == 0 )
  258. {
  259. i++;
  260. if(i < argc)
  261. {
  262. cmdline->scopes = argv[i];
  263. }
  264. else
  265. {
  266. return 1;
  267. }
  268. }
  269. else if( strcasecmp(argv[i],"-l") == 0 ||
  270. strcasecmp(argv[i],"--lang") == 0 )
  271. {
  272. i++;
  273. if(i < argc)
  274. {
  275. cmdline->lang = argv[i];
  276. }
  277. else
  278. {
  279. return 1;
  280. }
  281. }
  282. else if(strcasecmp(argv[i],"findsrvs") == 0)
  283. {
  284. cmdline->cmd = FINDSRVS;
  285. /* service type */
  286. i++;
  287. if(i < argc)
  288. {
  289. cmdline->cmdparam1 = argv[i];
  290. }
  291. else
  292. {
  293. return 1;
  294. }
  295. /* (optional) filter */
  296. i++;
  297. if(i < argc)
  298. {
  299. cmdline->cmdparam2 = argv[i];
  300. }
  301. break;
  302. }
  303. else if(strcasecmp(argv[i],"findattrs") == 0)
  304. {
  305. cmdline->cmd = FINDATTRS;
  306. /* url or service type */
  307. i++;
  308. if(i < argc)
  309. {
  310. cmdline->cmdparam1 = argv[i];
  311. }
  312. else
  313. {
  314. return 1;
  315. }
  316. /* (optional) attrids */
  317. i++;
  318. if(i < argc)
  319. {
  320. cmdline->cmdparam2 = argv[i];
  321. }
  322. }
  323. else if(strcasecmp(argv[i],"findsrvtypes") == 0)
  324. {
  325. cmdline->cmd = FINDSRVTYPES;
  326. /* (optional) naming authority */
  327. i++;
  328. if(i < argc)
  329. {
  330. cmdline->cmdparam1 = argv[i];
  331. }
  332. }
  333. else if(strcasecmp(argv[i],"findscopes") == 0)
  334. {
  335. cmdline->cmd = FINDSCOPES;
  336. }
  337. else if(strcasecmp(argv[i],"register") == 0)
  338. {
  339. cmdline->cmd = REGISTER;
  340. /* url */
  341. i++;
  342. if(i < argc)
  343. {
  344. cmdline->cmdparam1 = argv[i];
  345. }
  346. else
  347. {
  348. return 1;
  349. }
  350. /* attrids */
  351. i++;
  352. if(i < argc)
  353. {
  354. cmdline->cmdparam2 = argv[i];
  355. }
  356. else
  357. {
  358. return 1;
  359. }
  360. break;
  361. }
  362. else if(strcasecmp(argv[i],"deregister") == 0)
  363. {
  364. cmdline->cmd = DEREGISTER;
  365. /* url */
  366. i++;
  367. if(i < argc)
  368. {
  369. cmdline->cmdparam1 = argv[i];
  370. }
  371. else
  372. {
  373. return 1;
  374. }
  375. }
  376. else
  377. {
  378. return 1;
  379. }
  380. }
  381. return 0;
  382. }
  383. /*=========================================================================*/
  384. void DisplayUsage()
  385. /*=========================================================================*/
  386. {
  387. printf("Usage: slptool [options] command-and-arguments \n");
  388. printf(" options may be:\n");
  389. printf(" -s (or --scope) followed by a comma separated list of scopes\n");
  390. printf(" -l (or --language) followed by a language tag\n");
  391. printf(" command-and-arguments may be:\n");
  392. printf(" findsrvs service-type [filter]\n");
  393. printf(" findattrs url [attrids]\n");
  394. printf(" findsrvtypes [authority]\n");
  395. printf(" findscopes\n");
  396. printf(" register url attrs\n");
  397. printf(" deregister url attrs\n");
  398. }
  399. /*=========================================================================*/
  400. int main(int argc, char* argv[])
  401. /*=========================================================================*/
  402. {
  403. int result;
  404. SLPToolCommandLine cmdline;
  405. /* zero out the cmdline */
  406. memset(&cmdline,0,sizeof(cmdline));
  407. /* Parse the command line */
  408. if(ParseCommandLine(argc,argv,&cmdline) == 0)
  409. {
  410. switch(cmdline.cmd)
  411. {
  412. case FINDSRVS:
  413. FindSrvs(&cmdline);
  414. break;
  415. case FINDATTRS:
  416. FindAttrs(&cmdline);
  417. break;
  418. case FINDSRVTYPES:
  419. FindSrvTypes(&cmdline);
  420. break;
  421. case FINDSCOPES:
  422. FindScopes(&cmdline);
  423. break;
  424. case GETPROPERTY:
  425. // GetProperty(&cmdline);
  426. break;
  427. case REGISTER:
  428. Register(&cmdline);
  429. break;
  430. case DEREGISTER:
  431. Deregister(&cmdline);
  432. break;
  433. }
  434. }
  435. else
  436. {
  437. DisplayUsage();
  438. result = 1;
  439. }
  440. return 0;
  441. }