extension_gen.c 25 KB

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