PageRenderTime 80ms CodeModel.GetById 49ms RepoModel.GetById 1ms app.codeStats 0ms

/tags/start/openslp.contrib/slptool/slptool.c

#
C | 292 lines | 217 code | 36 blank | 39 comment | 45 complexity | f237764d218c3ae385b5e63a1da1586a 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_main.c */
  6. /* */
  7. /* Abstract: Main implementation for slpua */
  8. /* */
  9. /* Requires: OpenSLP installation */
  10. /* */
  11. /***************************************************************************/
  12. #include "slptool.h"
  13. /*=========================================================================*/
  14. SLPBoolean mySrvTypeCallback( SLPHandle hslp,
  15. const char* srvtypes,
  16. SLPError errcode,
  17. void* cookie )
  18. /*=========================================================================*/
  19. {
  20. if(errcode == SLP_OK)
  21. {
  22. printf("%s\n",srvtypes);
  23. }
  24. }
  25. /*=========================================================================*/
  26. void FindSrvTypes(SLPToolCommandLine* cmdline)
  27. /*=========================================================================*/
  28. {
  29. SLPError result;
  30. SLPHandle hslp;
  31. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  32. {
  33. result = SLPFindSrvTypes(hslp,
  34. cmdline->cmdparam1,
  35. cmdline->scopes,
  36. mySrvTypeCallback,
  37. 0);
  38. if(result != SLP_OK)
  39. {
  40. printf("errorcode: %i",result);
  41. }
  42. SLPClose(hslp);
  43. }
  44. }
  45. /*=========================================================================*/
  46. SLPBoolean myAttrCallback(SLPHandle hslp,
  47. const char* attrlist,
  48. SLPError errcode,
  49. void* cookie )
  50. /*=========================================================================*/
  51. {
  52. if(errcode == SLP_OK)
  53. {
  54. printf("%s\n",attrlist);
  55. }
  56. }
  57. /*=========================================================================*/
  58. void FindAttrs(SLPToolCommandLine* cmdline)
  59. /*=========================================================================*/
  60. {
  61. SLPError result;
  62. SLPHandle hslp;
  63. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  64. {
  65. printf("Calling FindAttrs(hslp,%s,%s,%s,callback\n",cmdline->cmdparam1,cmdline->scopes,cmdline->cmdparam2);
  66. result = SLPFindAttrs(hslp,
  67. cmdline->cmdparam1,
  68. cmdline->scopes,
  69. cmdline->cmdparam2,
  70. myAttrCallback,
  71. 0);
  72. if(result != SLP_OK)
  73. {
  74. printf("errorcode: %i",result);
  75. }
  76. SLPClose(hslp);
  77. }
  78. }
  79. /*=========================================================================*/
  80. SLPBoolean mySrvUrlCallback( SLPHandle hslp,
  81. const char* srvurl,
  82. unsigned short lifetime,
  83. SLPError errcode,
  84. void* cookie )
  85. /*=========================================================================*/
  86. {
  87. if(errcode == SLP_OK)
  88. {
  89. printf("%s,%i\n",srvurl,lifetime);
  90. }
  91. }
  92. /*=========================================================================*/
  93. void FindSrvs(SLPToolCommandLine* cmdline)
  94. /*=========================================================================*/
  95. {
  96. SLPError result;
  97. SLPHandle hslp;
  98. if(SLPOpen(cmdline->lang,SLP_FALSE,&hslp) == SLP_OK)
  99. {
  100. result = SLPFindSrvs(hslp,
  101. cmdline->cmdparam1,
  102. cmdline->scopes,
  103. cmdline->cmdparam2,
  104. mySrvUrlCallback,
  105. 0);
  106. if(result != SLP_OK)
  107. {
  108. printf("errorcode: %i",result);
  109. }
  110. SLPClose(hslp);
  111. }
  112. }
  113. /*=========================================================================*/
  114. int ParseCommandLine(int argc,char* argv[], SLPToolCommandLine* cmdline)
  115. /* Returns Zero on success. Non-zero on error.
  116. /*=========================================================================*/
  117. {
  118. int i;
  119. if(argc < 2)
  120. {
  121. /* not enough arguments */
  122. return 1;
  123. }
  124. for (i=1;i<argc;i++)
  125. {
  126. if( strcasecmp(argv[i],"-s") == 0 ||
  127. strcasecmp(argv[i],"--scopes") == 0 )
  128. {
  129. i++;
  130. if(i < argc)
  131. {
  132. cmdline->scopes = argv[i];
  133. }
  134. else
  135. {
  136. return 1;
  137. }
  138. }
  139. else if( strcasecmp(argv[i],"-l") == 0 ||
  140. strcasecmp(argv[i],"--lang") == 0 )
  141. {
  142. i++;
  143. if(i < argc)
  144. {
  145. cmdline->lang = argv[i];
  146. }
  147. else
  148. {
  149. return 1;
  150. }
  151. }
  152. else if(strcasecmp(argv[i],"findsrvs") == 0)
  153. {
  154. cmdline->cmd = FINDSRVS;
  155. /* service type */
  156. i++;
  157. if(i < argc)
  158. {
  159. cmdline->cmdparam1 = argv[i];
  160. }
  161. else
  162. {
  163. return 1;
  164. }
  165. /* (optional) filter */
  166. i++;
  167. if(i < argc)
  168. {
  169. cmdline->cmdparam2 = argv[i];
  170. }
  171. break;
  172. }
  173. else if(strcasecmp(argv[i],"findattrs") == 0)
  174. {
  175. cmdline->cmd = FINDATTRS;
  176. /* url or service type */
  177. i++;
  178. if(i < argc)
  179. {
  180. cmdline->cmdparam1 = argv[i];
  181. }
  182. else
  183. {
  184. return 1;
  185. }
  186. /* (optional) attrids */
  187. i++;
  188. if(i < argc)
  189. {
  190. cmdline->cmdparam2 = argv[i];
  191. }
  192. }
  193. else if(strcasecmp(argv[i],"findsrvtypes") == 0)
  194. {
  195. cmdline->cmd = FINDSRVTYPES;
  196. /* (optional) naming authority */
  197. i++;
  198. if(i < argc)
  199. {
  200. cmdline->cmdparam1 = argv[i];
  201. }
  202. }
  203. else
  204. {
  205. return 1;
  206. }
  207. }
  208. return 0;
  209. }
  210. /*=========================================================================*/
  211. void DisplayUsage()
  212. /*=========================================================================*/
  213. {
  214. printf("Usage: slptool [options] command-and-arguments \n");
  215. printf(" options may be:\n");
  216. printf(" -s (or --scope) followed by a comma separated list of scopes\n");
  217. printf(" -l (or --language) followed by a language tag\n");
  218. printf(" command-and-arguments may be:\n");
  219. printf(" findsrvs service-type [filter]\n");
  220. printf(" findattrs url [attrids]\n");
  221. printf(" findsrvtypes [authority]\n");
  222. }
  223. /*=========================================================================*/
  224. int main(int argc, char* argv[])
  225. /*=========================================================================*/
  226. {
  227. int result;
  228. SLPToolCommandLine cmdline;
  229. /* zero out the cmdline */
  230. memset(&cmdline,0,sizeof(cmdline));
  231. /* Parse the command line */
  232. if(ParseCommandLine(argc,argv,&cmdline) == 0)
  233. {
  234. switch(cmdline.cmd)
  235. {
  236. case FINDSRVS:
  237. FindSrvs(&cmdline);
  238. break;
  239. case FINDATTRS:
  240. FindAttrs(&cmdline);
  241. break;
  242. case FINDSRVTYPES:
  243. FindSrvTypes(&cmdline);
  244. break;
  245. case GETPROPERTY:
  246. // GetProperty(&cmdline);
  247. break;
  248. }
  249. }
  250. else
  251. {
  252. DisplayUsage();
  253. result = 1;
  254. }
  255. return 0;
  256. }