extension_gen.bak.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696
  1. /***
  2. 2016.1.20 support Chinese utf8
  3. 2016.4.5 support wmi gen ,by zhi.qin changed
  4. 2016.06.24 modify codec prioty.
  5. 2016.07.01 modify _F1 field
  6. 2016.07.27 add _opus for opus _vp8 for vp8 ,extensions and webrtc
  7. 2016.09.26 add _F2 field for EX16S MAC storage
  8. 2016.11.21 modify _F2 to _exmacaddr ,add _exdahdichan
  9. 在users_extension新增字段: _exmacaddr (原来的_F2) not use
  10. 在users_extension新增字段: _exdahdichan (原来的_F3) not use
  11. 在users_extension新增字段:_vp8
  12. 在users_extension新增字段:_opus
  13. ***/
  14. #include<stdlib.h>
  15. #include<stdio.h>
  16. #include<string.h>
  17. #include<mysql/mysql.h>
  18. #include<mysql/mysqld_error.h>
  19. #include<mysql/errmsg.h>
  20. #define EXTEN_GEN_CFG "/etc/asterisk/exten_gen.ini"
  21. #define USER_WEBRTC_CONFIG_FILE "/etc/asterisk/users_webrtc.conf"
  22. MYSQL conn;
  23. MYSQL_RES *res_exten;
  24. MYSQL_ROW exten_row;
  25. char corr_str[20];
  26. void connection(const char *host,const char *user,const char *password,const char *database){
  27. mysql_init(&conn);
  28. if(mysql_real_connect(&conn,host,user,password,database,3306,NULL,0)){
  29. mysql_set_character_set(&conn,"utf8");
  30. printf("Connection success!\n");
  31. }else{
  32. fprintf(stderr,"Connection failed!\n");
  33. if(mysql_errno(&conn)){
  34. fprintf(stderr,"Connection error %d: %s\n",mysql_errno(&conn),mysql_error(&conn));
  35. }
  36. exit -1;
  37. }
  38. }
  39. /*
  40. *file exten_gen.ini
  41. *dbserverip=
  42. *dbuser=
  43. *dbpasswd=
  44. *dbname=
  45. */
  46. void getstring(char *buf,char *db_cfg){
  47. char str1[100],str2[100],*tmp;
  48. int len;
  49. strcpy(str1,buf);
  50. tmp=strchr(str1,'=');
  51. strcpy(str2,tmp);
  52. if (isspace(str2[1]))
  53. strcpy(str1,&str2[2]);
  54. else
  55. strcpy(str1,&str2[1]);
  56. len=strlen(str1);
  57. if(str1[len-2] == '\r')
  58. str1[len-2]='\0';
  59. else if(str1[len-1] == '\n')
  60. str1[len-1]='\0';
  61. else
  62. str1[len]='\0';
  63. //printf("str1=%s\n",str1);
  64. strcpy(db_cfg,str1);
  65. }
  66. int main(int argc, char *argv[]){
  67. FILE *fp,*fp_cfg;
  68. MYSQL_FIELD *exten_field;
  69. unsigned int field_count;
  70. unsigned int i;
  71. //int dahdichan_en = 0;
  72. char *field_name = NULL;
  73. char codecs[100] = {0},dahdichan[10] = {0},buffer[100] = {0};//,db_cfg[4][30];
  74. char *code_addr = NULL;//,*dbserverip = NULL,*dbuser = NULL,*dbpasswd = NULL,*dbname = NULL;
  75. char new_codecs[20][100]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  76. if ((fp_cfg=fopen(EXTEN_GEN_CFG,"r"))==NULL) {
  77. printf("File: %s is not open ,fail.\n",EXTEN_GEN_CFG);
  78. return -1;
  79. }
  80. /*
  81. while(fgets(buffer,100,fp_cfg)){
  82. if(!strncasecmp(buffer,"dbserverip",10))
  83. getstring(buffer,db_cfg[0]);
  84. if(!strncasecmp(buffer,"dbuser",6))
  85. getstring(buffer,db_cfg[1]);
  86. if(!strncasecmp(buffer,"dbpasswd",8))
  87. getstring(buffer,db_cfg[2]);
  88. if(!strncasecmp(buffer,"dbname",6))
  89. getstring(buffer,db_cfg[3]);
  90. }
  91. */
  92. char *hostname = getenv("MYSQL");
  93. char *username = getenv("MYSQL_USER");
  94. char *password = getenv("MYSQL_PASSWORD");
  95. char *dbname = getenv("MYSQL_DATABASE");
  96. connection(hostname,username,password,dbname);
  97. int res ;
  98. if(NULL != argv[1]){
  99. switch(*argv[1]){
  100. case '0':
  101. res = mysql_query(&conn,"SELECT * from t_pbx_users_extension order by exten asc");
  102. if(res){
  103. fprintf(stderr,"SELECT error: %s\n",mysql_error(&conn));
  104. return -1;
  105. }else{
  106. res_exten = mysql_store_result(&conn);
  107. if(res_exten){
  108. printf("Recieved %lu rows\n",(unsigned long)mysql_num_rows(res_exten));
  109. }
  110. if(!(fp = fopen("/etc/asterisk/users_extension.conf","w+"))){
  111. printf("Creating extension config file failed,please check it.\n");
  112. return -1;
  113. }
  114. field_count = mysql_num_fields(res_exten);
  115. printf("field_count = %d\n",field_count);
  116. while(exten_row = mysql_fetch_row(res_exten)){
  117. memset(codecs,0,sizeof(codecs));
  118. // dahdichan_en = 0;
  119. // printf("....%s...\n",codecs[0]);
  120. for (i=0;i<20;i++)
  121. {
  122. memset(new_codecs[i],0,sizeof(new_codecs[i]));
  123. }
  124. //mysql_field_seek(res_exten,0);//point to the first field.
  125. for(i=0;i<field_count;i++){
  126. exten_field = mysql_fetch_field(res_exten);
  127. if(!strncasecmp(exten_field->name,"id",strlen(exten_field->name)))
  128. continue;
  129. if(!strncasecmp(exten_field->name,"createdAt",strlen(exten_field->name)))
  130. continue;
  131. if(!strncasecmp(exten_field->name,"updatedAt",strlen(exten_field->name)))
  132. continue;
  133. if(!strncasecmp(exten_field->name,"exten",strlen(exten_field->name))){
  134. fprintf(fp,"[%s]\n",exten_row[i]);
  135. continue;
  136. }
  137. #if 0
  138. //support EX16S
  139. if(!strncasecmp(exten_field->name,"_dahdichan",strlen(exten_field->name))){
  140. if (strlen(exten_row[i]) > 0 )
  141. strcpy(dahdichan,exten_row[i]);//save dahdi chan num
  142. continue;
  143. }
  144. if(!strncasecmp(exten_field->name,"_exmacaddr",strlen(exten_field->name))){
  145. if (strlen(exten_row[i]) > 15)
  146. dahdichan_en = 1;
  147. continue;
  148. }
  149. #endif
  150. //end support
  151. //add acl for extensions
  152. if(!strncasecmp(exten_field->name,"F1",strlen(exten_field->name))){
  153. if(!strncasecmp(exten_row[i],"remote",6)) {
  154. fprintf(fp,"acl = remote_extensions_acl\n");
  155. } else
  156. fprintf(fp,"acl = local_extensions_acl\n");
  157. continue;
  158. }
  159. if(!strncasecmp(exten_field->name,"F2",strlen(exten_field->name)))
  160. continue;
  161. if(!strncasecmp(exten_field->name,"F3",strlen(exten_field->name)))
  162. continue;
  163. if(!strncasecmp(exten_field->name,"F4",strlen(exten_field->name)))
  164. continue;
  165. //add codecs to cfg file.
  166. if(!strncasecmp(exten_field->name,"alaw",strlen(exten_field->name))){
  167. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  168. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  169. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  170. }
  171. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  172. continue;
  173. }
  174. else
  175. continue;
  176. }
  177. if(!strncasecmp(exten_field->name,"ulaw",strlen(exten_field->name))){
  178. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  179. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  180. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  181. }
  182. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  183. continue;
  184. }
  185. else
  186. continue;
  187. }
  188. if(!strncasecmp(exten_field->name,"g729",strlen(exten_field->name))){
  189. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  190. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  191. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  192. }
  193. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  194. continue;
  195. }
  196. else
  197. continue;
  198. }
  199. if(!strncasecmp(exten_field->name,"g726",strlen(exten_field->name))){
  200. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  201. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  202. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  203. }
  204. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  205. continue;
  206. }
  207. else
  208. continue;
  209. }
  210. if(!strncasecmp(exten_field->name,"g722",strlen(exten_field->name))){
  211. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  212. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  213. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  214. }
  215. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  216. continue;
  217. }
  218. else
  219. continue;
  220. }
  221. if(!strncasecmp(exten_field->name,"gsm",strlen(exten_field->name))){
  222. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  223. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  224. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  225. }
  226. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  227. continue;
  228. }
  229. else
  230. continue;
  231. }
  232. if(!strncasecmp(exten_field->name,"speex",strlen(exten_field->name))){
  233. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  234. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  235. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  236. }
  237. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  238. continue;
  239. }
  240. else
  241. continue;
  242. }
  243. if(!strncasecmp(exten_field->name,"opus",strlen(exten_field->name))){
  244. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  245. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  246. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  247. }
  248. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  249. continue;
  250. }
  251. else
  252. continue;
  253. }
  254. if(!strncasecmp(exten_field->name,"h261",strlen(exten_field->name))){
  255. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  256. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  257. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  258. }
  259. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  260. continue;
  261. }
  262. else
  263. continue;
  264. }
  265. if(!strncasecmp(exten_field->name,"h263",strlen(exten_field->name))){
  266. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  267. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  268. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  269. }
  270. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  271. continue;
  272. }
  273. else
  274. continue;
  275. }
  276. if(!strncasecmp(exten_field->name,"h263p",strlen(exten_field->name))){
  277. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  278. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  279. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  280. }
  281. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  282. continue;
  283. }
  284. else
  285. continue;
  286. }
  287. if(!strncasecmp(exten_field->name,"h264",strlen(exten_field->name))){
  288. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  289. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  290. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  291. }
  292. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  293. continue;
  294. }
  295. else
  296. continue;
  297. }
  298. if(!strncasecmp(exten_field->name,"vp8",strlen(exten_field->name))){
  299. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  300. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  301. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  302. }
  303. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  304. continue;
  305. }
  306. else
  307. continue;
  308. }
  309. if(0 == strlen(exten_row[i])){
  310. if(!strncasecmp(exten_field->name,"secret",strlen(exten_field->name)))
  311. ;
  312. else if(!strncasecmp(exten_field->name,"_vmsecret",strlen(exten_field->name)))
  313. ;
  314. else continue;
  315. }
  316. field_name = exten_field->name;
  317. //add by zhi.qin
  318. if(!strncasecmp(exten_field->name,"mailbox",strlen(exten_field->name)))
  319. {
  320. if(0 < strlen(exten_row[i]) && !strstr(exten_row[i],"@")){
  321. fprintf(fp,"%s = %s@default\n",field_name,exten_row[i]);
  322. continue;
  323. }
  324. }//end 2016.04.05
  325. //printf("%s = %s\n",field_name,exten_row[i]);
  326. fprintf(fp,"%s = %s\n",field_name,exten_row[i]);
  327. }
  328. // printf("codecs len %d\n",strlen(codecs));
  329. // if(strlen(codecs) <= 4){
  330. // printf("something wrong happened to codecs selection.\n");
  331. // exit -1;
  332. // }
  333. // codecs[strlen(codecs)-1] = '\0';
  334. // printf("codecs = %s\n",code_addr);
  335. fputs("disallow = all\n",fp);
  336. //process new_codecs
  337. for (i=0;i<20;i++)
  338. {
  339. if (new_codecs[i][0] != '\0')
  340. if (codecs[0] != '\0' )
  341. strcat(codecs,",");
  342. code_addr = strcat(codecs,new_codecs[i]);
  343. }
  344. //printf("codecs = %s\n",code_addr);
  345. fprintf(fp,"allow = %s\n",code_addr);
  346. //if ( (dahdichan_en == 1) && (strlen(dahdichan) > 0) )
  347. // fprintf(fp,"dahdichan = %s\n",dahdichan);
  348. fprintf(fp,"subscribemwi = no\n");//add by zhi.qin for sub mwi
  349. //fprintf(fp,"allow = %s\n",code_addr);
  350. fprintf(fp,"read = NULL\nwrite = NULL\n\n");//refuese sip exten permit access
  351. }
  352. }
  353. fclose(fp);
  354. break;
  355. case '1':
  356. res = mysql_query(&conn,"SELECT * from t_pbx_users_webrtc order by exten asc");
  357. if(res){
  358. fprintf(stderr,"SELECT error: %s\n",mysql_error(&conn));
  359. return -1;
  360. }else{
  361. res_exten = mysql_store_result(&conn);
  362. if((fp=fopen(USER_WEBRTC_CONFIG_FILE,"w+"))==NULL)
  363. {printf( "cannot open %s file,please check.\n",USER_WEBRTC_CONFIG_FILE);return -1;}
  364. fputs("[webrtc](!)\n",fp);
  365. fputs("srtpcapable = yes\n",fp);
  366. fputs("encryption = yes\n",fp);
  367. fputs("avpf = yes\n",fp);
  368. fputs("rtcp_mux = yes\n",fp);
  369. fputs("force_avp = yes\n",fp);
  370. fputs("icesupport = yes\n",fp);
  371. fputs("dtlsenable = yes\n",fp);
  372. fputs("dtlsverify = no\n",fp);
  373. fputs("dtlscertfile = /etc/asterisk/keys/asterisk.pem\n",fp);
  374. fputs("dtlscafile = /etc/asterisk/keys/ca.crt\n",fp);
  375. fputs("dtlssetup = actpass\n",fp);
  376. fputs("transport = ws,wss\n",fp);
  377. fputs("videosupport = no\n\n",fp);
  378. fputs("rtcp_mux = yes\n\n",fp);
  379. field_count = mysql_num_fields(res_exten);
  380. printf("field_count = %d\n",field_count);
  381. while(exten_row = mysql_fetch_row(res_exten)){
  382. memset(codecs,0,sizeof(codecs));
  383. // printf("....%s...\n",codecs[0]);
  384. //mysql_field_seek(res_exten,0);//point to the first field.
  385. for (i=0;i<20;i++)
  386. {
  387. memset(new_codecs[i],0,sizeof(new_codecs[i]));
  388. }
  389. for(i=0;i<field_count;i++){
  390. exten_field = mysql_fetch_field(res_exten);
  391. if(!strncasecmp(exten_field->name,"id",strlen(exten_field->name)))
  392. continue;
  393. if(!strncasecmp(exten_field->name,"exten",strlen(exten_field->name))){
  394. fprintf(fp,"[%s](webrtc)\n",exten_row[i]);
  395. continue;
  396. }
  397. if(!strncasecmp(exten_field->name,"F1",strlen(exten_field->name)))
  398. continue;
  399. if(!strncasecmp(exten_field->name,"F2",strlen(exten_field->name)))
  400. continue;
  401. if(!strncasecmp(exten_field->name,"F3",strlen(exten_field->name)))
  402. continue;
  403. if(!strncasecmp(exten_field->name,"F4",strlen(exten_field->name)))
  404. continue;
  405. if(!strncasecmp(exten_field->name,"email",strlen(exten_field->name)))
  406. continue;
  407. if(!strncasecmp(exten_field->name,"dahdichan",strlen(exten_field->name)))
  408. continue;
  409. if(!strncasecmp(exten_field->name,"hasexten",strlen(exten_field->name)))
  410. continue;
  411. if(!strncasecmp(exten_field->name,"directmedia",strlen(exten_field->name)))
  412. continue;
  413. if(!strncasecmp(exten_field->name,"videosupport",strlen(exten_field->name)))
  414. continue;
  415. #if 0 //del 2015.11.19
  416. if(!strncasecmp(exten_field->name,"_transport",strlen(exten_field->name)))
  417. continue;
  418. #endif
  419. if(!strncasecmp(exten_field->name,"encryption",strlen(exten_field->name)))
  420. continue;
  421. if(!strncasecmp(exten_field->name,"srtpcapable",strlen(exten_field->name)))
  422. continue;
  423. if(!strncasecmp(exten_field->name,"deny",strlen(exten_field->name)))
  424. continue;
  425. if(!strncasecmp(exten_field->name,"permit",strlen(exten_field->name)))
  426. continue;
  427. if(!strncasecmp(exten_field->name,"avpf",strlen(exten_field->name)))
  428. continue;
  429. if(!strncasecmp(exten_field->name,"force_avp",strlen(exten_field->name)))
  430. continue;
  431. if(!strncasecmp(exten_field->name,"icesupport",strlen(exten_field->name)))
  432. continue;
  433. if(!strncasecmp(exten_field->name,"dtlsverify",strlen(exten_field->name)))
  434. continue;
  435. if(!strncasecmp(exten_field->name,"dtlsenable",strlen(exten_field->name)))
  436. continue;
  437. if(!strncasecmp(exten_field->name,"dtlscertfile",strlen(exten_field->name)))
  438. continue;
  439. if(!strncasecmp(exten_field->name,"dtlscafile",strlen(exten_field->name)))
  440. continue;
  441. if(!strncasecmp(exten_field->name,"dtlssetup",strlen(exten_field->name)))
  442. continue;
  443. //add codecs to cfg file.
  444. if(!strncasecmp(exten_field->name,"alaw",strlen(exten_field->name))){
  445. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  446. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  447. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  448. }
  449. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  450. continue;;
  451. }
  452. else
  453. continue;
  454. }
  455. if(!strncasecmp(exten_field->name,"ulaw",strlen(exten_field->name))){
  456. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  457. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  458. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  459. }
  460. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  461. continue;;
  462. }
  463. else
  464. continue;
  465. }
  466. if(!strncasecmp(exten_field->name,"g729",strlen(exten_field->name))){
  467. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  468. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  469. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  470. }
  471. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  472. continue;;
  473. }
  474. else
  475. continue;
  476. }
  477. if(!strncasecmp(exten_field->name,"g726",strlen(exten_field->name))){
  478. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  479. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  480. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  481. }
  482. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  483. continue;;
  484. }
  485. else
  486. continue;
  487. }
  488. if(!strncasecmp(exten_field->name,"g722",strlen(exten_field->name))){
  489. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  490. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  491. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  492. }
  493. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  494. continue;;
  495. }
  496. else
  497. continue;
  498. }
  499. if(!strncasecmp(exten_field->name,"gsm",strlen(exten_field->name))){
  500. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  501. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  502. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  503. }
  504. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  505. continue;;
  506. }
  507. else
  508. continue;
  509. }
  510. if(!strncasecmp(exten_field->name,"speex",strlen(exten_field->name))){
  511. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  512. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  513. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  514. }
  515. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  516. continue;;
  517. }
  518. else
  519. continue;
  520. }
  521. if(!strncasecmp(exten_field->name,"opus",strlen(exten_field->name))){
  522. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  523. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  524. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  525. }
  526. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  527. continue;;
  528. }
  529. else
  530. continue;
  531. }
  532. if(!strncasecmp(exten_field->name,"h261",strlen(exten_field->name))){
  533. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  534. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  535. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  536. }
  537. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  538. continue;;
  539. }
  540. else
  541. continue;
  542. }
  543. if(!strncasecmp(exten_field->name,"h263",strlen(exten_field->name))){
  544. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  545. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  546. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  547. }
  548. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  549. continue;;
  550. }
  551. else
  552. continue;
  553. }
  554. if(!strncasecmp(exten_field->name,"h263p",strlen(exten_field->name))){
  555. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  556. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  557. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  558. }
  559. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  560. continue;;
  561. }
  562. else
  563. continue;
  564. }
  565. if(!strncasecmp(exten_field->name,"h264",strlen(exten_field->name))){
  566. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  567. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  568. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  569. }
  570. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  571. continue;;
  572. }
  573. else
  574. continue;
  575. }
  576. if(!strncasecmp(exten_field->name,"vp8",strlen(exten_field->name))){
  577. if((atoi(exten_row[i]) > 0) && (atoi(exten_row[i]) < 20 )) {
  578. if (new_codecs[atoi(exten_row[i])][0] != '\0') {
  579. code_addr = strcat(new_codecs[atoi(exten_row[i])], ",");//not null
  580. }
  581. code_addr = strcat(new_codecs[atoi(exten_row[i])],exten_field->name);
  582. continue;;
  583. }
  584. else
  585. continue;
  586. }
  587. if(0 == strlen(exten_row[i])){
  588. if(!strncasecmp(exten_field->name,"secret",strlen(exten_field->name)))
  589. ;
  590. else if(!strncasecmp(exten_field->name,"vmsecret",strlen(exten_field->name)))
  591. ;
  592. else continue;
  593. }
  594. field_name = exten_field->name;
  595. fprintf(fp,"%s = %s\n",field_name,exten_row[i]);
  596. }
  597. // printf("codecs len %d\n",strlen(codecs));
  598. //if(strlen(codecs) <= 4){
  599. // printf("something wrong happened to codecs selection.\n");
  600. // exit -1;
  601. //}
  602. //codecs[strlen(codecs)-1] = '\0';
  603. for (i=0;i<20;i++)
  604. {
  605. if (new_codecs[i][0] != '\0')
  606. if (codecs[0] != '\0' )
  607. strcat(codecs,",");
  608. code_addr = strcat(codecs,new_codecs[i]);
  609. }
  610. // printf("codecs = %s\n",code_addr);
  611. fputs("disallow = all\n",fp);
  612. fprintf(fp,"allow = %s\n",code_addr);
  613. fprintf(fp,"read = NULL\nwrite=NULL\n\n");//refuese sip exten permit access
  614. }
  615. }
  616. fclose(fp);
  617. break;
  618. default:
  619. printf("You enter the wrong parameters.please check it\n");
  620. break;
  621. }
  622. fclose(fp_cfg);
  623. mysql_free_result(res_exten);
  624. mysql_close(&conn);
  625. return 0;
  626. } else {
  627. fclose(fp_cfg);
  628. mysql_free_result(res_exten);
  629. mysql_close(&conn);
  630. return 0;
  631. }
  632. }