|
|
1.1 ! root 1: /* scfgmdm.c */ ! 2: ! 3: /* $Id: scfgmdm.c,v 1.3 2004/05/30 06:56:06 deuce Exp $ */ ! 4: ! 5: /**************************************************************************** ! 6: * @format.tab-size 4 (Plain Text/Source Code File Header) * ! 7: * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * ! 8: * * ! 9: * Copyright 2002 Rob Swindell - http://www.synchro.net/copyright.html * ! 10: * * ! 11: * This program is free software; you can redistribute it and/or * ! 12: * modify it under the terms of the GNU General Public License * ! 13: * as published by the Free Software Foundation; either version 2 * ! 14: * of the License, or (at your option) any later version. * ! 15: * See the GNU General Public License for more details: gpl.txt or * ! 16: * http://www.fsf.org/copyleft/gpl.html * ! 17: * * ! 18: * Anonymous FTP access to the most recent released source is available at * ! 19: * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net * ! 20: * * ! 21: * Anonymous CVS access to the development source and modification history * ! 22: * is available at cvs.synchro.net:/cvsroot/sbbs, example: * ! 23: * cvs -d :pserver:[email protected]:/cvsroot/sbbs login * ! 24: * (just hit return, no password is necessary) * ! 25: * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src * ! 26: * * ! 27: * For Synchronet coding style and modification guidelines, see * ! 28: * http://www.synchro.net/source.html * ! 29: * * ! 30: * You are encouraged to submit any modifications (preferably in Unix diff * ! 31: * format) via e-mail to [email protected] * ! 32: * * ! 33: * Note: If this box doesn't appear square, then you need to fix your tabs. * ! 34: ****************************************************************************/ ! 35: ! 36: #include "scfg.h" ! 37: ! 38: int exec_mdm(char *fname); ! 39: ! 40: void mdm_cfg(int mdmnum) ! 41: { ! 42: ! 43: FREE(cfg.mdm_result); ! 44: cfg.mdm_result=NULL; ! 45: ! 46: /* ! 47: strcpy(cfg.mdm_answ,"ATA"); ! 48: strcpy(cfg.mdm_hang,"ATH"); ! 49: strcpy(cfg.mdm_dial,"ATDT"); ! 50: strcpy(cfg.mdm_offh,"ATM0H1"); ! 51: strcpy(cfg.mdm_term,"ATE1V1"); ! 52: strcpy(cfg.mdm_init,"AT&FS0=0S2=128E0V0X4&C1&D2"); ! 53: */ ! 54: cfg.mdm_answ[0]=0; ! 55: cfg.mdm_hang[0]=0; ! 56: cfg.mdm_dial[0]=0; ! 57: cfg.mdm_offh[0]=0; ! 58: cfg.mdm_term[0]=0; ! 59: cfg.mdm_init[0]=0; ! 60: cfg.mdm_spec[0]=0; ! 61: cfg.mdm_results=0; ! 62: cfg.mdm_misc=(MDM_RTS|MDM_CTS); ! 63: ! 64: exec_mdm(mdm_file[mdmnum]); ! 65: ! 66: } ! 67: ! 68: void cvttab(char *str) ! 69: { ! 70: int i; ! 71: ! 72: for(i=0;str[i];i++) ! 73: if(str[i]==TAB) ! 74: str[i]=' '; ! 75: } ! 76: ! 77: int export_mdm(char *fname) ! 78: { ! 79: char str[256]; ! 80: int file,i; ! 81: time_t now; ! 82: FILE *stream; ! 83: ! 84: sprintf(str,"%s%s.MDM",cfg.ctrl_dir,fname); ! 85: if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) ! 86: return(0); ! 87: if((stream=fdopen(file,"wb"))==NULL) { ! 88: close(file); ! 89: return(0); } ! 90: ! 91: now=time(NULL); ! 92: fprintf(stream,"# Exported from %s Node %u on %.24s\r\n\r\n" ! 93: ,cfg.sys_name,cfg.node_num,ctime(&now)); ! 94: fprintf(stream,"COM_RATE\t%ld\r\n",cfg.com_rate); ! 95: fprintf(stream,"INIT_STR\t%s\r\n",cfg.mdm_init); ! 96: fprintf(stream,"DIAL_STR\t%s\r\n",cfg.mdm_dial); ! 97: fprintf(stream,"HANGUP_STR\t%s\r\n",cfg.mdm_hang); ! 98: fprintf(stream,"ANSWER_STR\t%s\r\n",cfg.mdm_answ); ! 99: fprintf(stream,"OFFHOOK_STR\t%s\r\n",cfg.mdm_offh); ! 100: fprintf(stream,"SPEC_INIT\t%s\r\n",cfg.mdm_spec); ! 101: fprintf(stream,"TERM_INIT\t%s\r\n",cfg.mdm_term); ! 102: fprintf(stream,"LOCKED_RATE\t%s\r\n",(cfg.mdm_misc&MDM_STAYHIGH) ? "YES":"NO"); ! 103: fprintf(stream,"CALLER_ID\t%s\r\n",(cfg.mdm_misc&MDM_CALLERID) ? "YES":"NO"); ! 104: fprintf(stream,"DROP_DTR\t%s\r\n",(cfg.mdm_misc&MDM_NODTR) ? "NO":"YES"); ! 105: fprintf(stream,"FLOW_CONTROL\t%s\r\n" ! 106: ,(cfg.mdm_misc&(MDM_RTS|MDM_CTS)==(MDM_RTS|MDM_CTS)) ? "BOTH": ! 107: (cfg.mdm_misc&MDM_CTS) ? "TRANSMIT" : (cfg.mdm_misc&MDM_RTS) ? "RECEIVE" : "NONE"); ! 108: for(i=0;i<cfg.mdm_results;i++) ! 109: fprintf(stream,"RESULT\t\t%u\t%u\t%u\t%s\r\n",cfg.mdm_result[i].code ! 110: ,cfg.mdm_result[i].cps,cfg.mdm_result[i].rate,cfg.mdm_result[i].str); ! 111: ! 112: fclose(stream); ! 113: ! 114: return(1); ! 115: } ! 116: ! 117: int exec_mdm(char *fname) ! 118: { ! 119: char str[256],msg[128],*p; ! 120: int file,i,j; ! 121: FILE *stream; ! 122: ! 123: sprintf(str,"%s%s.MDM",cfg.ctrl_dir,fname); ! 124: ! 125: if((file=open(str,O_RDONLY|O_BINARY|O_DENYALL))==-1) ! 126: return(0); ! 127: if((stream=fdopen(file,"rb"))==NULL) { ! 128: close(file); ! 129: return(0); } ! 130: ! 131: while(!feof(stream)) { ! 132: if(!fgets(str,255,stream)) ! 133: break; ! 134: cvttab(str); ! 135: truncsp(str); ! 136: p=str; ! 137: while(*p && *p<=' ') /* look for beginning of command */ ! 138: p++; ! 139: if(!*p) ! 140: continue; ! 141: if(*p=='#') /* remarks start with # */ ! 142: continue; ! 143: ! 144: if(!strnicmp(p,"COM_RATE",8)) { ! 145: p+=8; ! 146: while(*p==' ') p++; ! 147: cfg.com_rate=atol(p); ! 148: continue; } ! 149: ! 150: if(!strnicmp(p,"INIT_STR",8)) { ! 151: p+=8; ! 152: while(*p==' ') p++; ! 153: sprintf(cfg.mdm_init,"%.63s",p); ! 154: continue; } ! 155: ! 156: if(!strnicmp(p,"DIAL_STR",8)) { ! 157: p+=8; ! 158: while(*p==' ') p++; ! 159: sprintf(cfg.mdm_dial,"%.63s",p); ! 160: continue; } ! 161: ! 162: if(!strnicmp(p,"HANGUP_STR",10)) { ! 163: p+=10; ! 164: while(*p==' ') p++; ! 165: sprintf(cfg.mdm_hang,"%.63s",p); ! 166: continue; } ! 167: ! 168: if(!strnicmp(p,"ANSWER_STR",10)) { ! 169: p+=10; ! 170: while(*p==' ') p++; ! 171: sprintf(cfg.mdm_answ,"%.63s",p); ! 172: continue; } ! 173: ! 174: if(!strnicmp(p,"OFFHOOK_STR",11)) { ! 175: p+=11; ! 176: while(*p==' ') p++; ! 177: sprintf(cfg.mdm_offh,"%.63s",p); ! 178: continue; } ! 179: ! 180: if(!strnicmp(p,"SPEC_INIT",9)) { ! 181: p+=9; ! 182: while(*p==' ') p++; ! 183: sprintf(cfg.mdm_spec,"%.63s",p); ! 184: continue; } ! 185: ! 186: if(!strnicmp(p,"TERM_INIT",9)) { ! 187: p+=9; ! 188: while(*p==' ') p++; ! 189: sprintf(cfg.mdm_term,"%.63s",p); ! 190: continue; } ! 191: ! 192: if(!strnicmp(p,"LOCKED_RATE",11)) { ! 193: p+=11; ! 194: while(*p==' ') p++; ! 195: if(!stricmp(p,"OFF") || !stricmp(p,"NO")) ! 196: cfg.mdm_misc&=~MDM_STAYHIGH; ! 197: else ! 198: cfg.mdm_misc|=MDM_STAYHIGH; ! 199: continue; } ! 200: ! 201: if(!strnicmp(p,"CALLER_ID",9)) { ! 202: p+=9; ! 203: while(*p==' ') p++; ! 204: if(!stricmp(p,"YES") || !stricmp(p,"ON")) ! 205: cfg.mdm_misc|=MDM_CALLERID; ! 206: else ! 207: cfg.mdm_misc&=~MDM_CALLERID; ! 208: continue; } ! 209: ! 210: if(!strnicmp(p,"VERBAL_RESULTS",14)) { ! 211: p+=14; ! 212: while(*p==' ') p++; ! 213: if(!stricmp(p,"YES") || !stricmp(p,"ON")) ! 214: cfg.mdm_misc|=MDM_VERBAL; ! 215: else ! 216: cfg.mdm_misc&=~MDM_VERBAL; ! 217: continue; } ! 218: ! 219: if(!strnicmp(p,"DROP_DTR",8)) { ! 220: p+=8; ! 221: while(*p==' ') p++; ! 222: if(!stricmp(p,"OFF") || !stricmp(p,"NO")) ! 223: cfg.mdm_misc|=MDM_NODTR; ! 224: else ! 225: cfg.mdm_misc&=~MDM_NODTR; ! 226: continue; } ! 227: ! 228: if(!strnicmp(p,"FLOW_CONTROL",12)) { ! 229: p+=12; ! 230: while(*p==' ') p++; ! 231: cfg.mdm_misc&=~(MDM_RTS|MDM_CTS); ! 232: strupr(p); ! 233: if(strstr(p,"RTS") || strstr(p,"RECEIVE") || strstr(p,"RECV") ! 234: || strstr(p,"BOTH")) ! 235: cfg.mdm_misc|=MDM_RTS; ! 236: if(strstr(p,"CTS") || strstr(p,"TRANSMIT") || strstr(p,"SEND") ! 237: || strstr(p,"BOTH")) ! 238: cfg.mdm_misc|=MDM_CTS; ! 239: continue; } ! 240: ! 241: if(!strnicmp(p,"RESULT ",7)) { ! 242: p+=7; ! 243: while(*p==' ') p++; ! 244: i=atoi(p); ! 245: for(j=0;j<cfg.mdm_results;j++) ! 246: if(cfg.mdm_result[j].code==i) ! 247: break; ! 248: if(j>=cfg.mdm_results) { ! 249: if((cfg.mdm_result=(mdm_result_t *)REALLOC( ! 250: cfg.mdm_result,sizeof(mdm_result_t) ! 251: *(cfg.mdm_results+1)))==NULL) { ! 252: errormsg(WHERE,ERR_ALLOC,p,cfg.mdm_results+1); ! 253: cfg.mdm_results=0; ! 254: bail(1); ! 255: continue; } ! 256: cfg.mdm_results++; } ! 257: cfg.mdm_result[j].code=i; ! 258: while(*p!=' ') p++; ! 259: while(*p==' ') p++; ! 260: cfg.mdm_result[j].cps=atoi(p); ! 261: while(*p!=' ') p++; ! 262: while(*p==' ') p++; ! 263: cfg.mdm_result[j].rate=atoi(p); ! 264: while(*p!=' ') p++; ! 265: while(*p==' ') p++; ! 266: sprintf(cfg.mdm_result[j].str,"%.*s",LEN_MODEM,p); ! 267: continue; } ! 268: ! 269: if(!strnicmp(p,"INCLUDE ",8)) { ! 270: p+=8; ! 271: while(*p==' ') p++; ! 272: exec_mdm(p); ! 273: continue; } ! 274: ! 275: sprintf(msg,"ERROR: '%.15s' in %.8s.MDM",p,fname); ! 276: savnum--; ! 277: umsg(msg); ! 278: savnum++; } ! 279: ! 280: fclose(stream); ! 281: return(1); ! 282: } ! 283: ! 284: ! 285: void init_mdms() ! 286: { ! 287: char str[128],fname[128]; ! 288: int file; ! 289: FILE *stream; ! 290: ! 291: mdm_types=0; ! 292: mdm_type=NULL; ! 293: mdm_file=NULL; ! 294: sprintf(str,"%sMDMS.IXT",cfg.ctrl_dir); ! 295: if((file=nopen(str,O_RDONLY))==-1) { ! 296: errormsg(WHERE,ERR_OPEN,str,O_RDONLY); ! 297: return; } ! 298: if((stream=fdopen(file,"rb"))==NULL) { ! 299: close(file); ! 300: errormsg(WHERE,ERR_FDOPEN,str,O_RDONLY); ! 301: return; } ! 302: ! 303: while(!feof(stream)) { ! 304: if(!fgets(str,120,stream)) ! 305: break; ! 306: truncsp(str); ! 307: if(!fgets(fname,120,stream)) ! 308: break; ! 309: truncsp(fname); ! 310: if((mdm_type=REALLOC(mdm_type,sizeof(char *)*(mdm_types+1)))==NULL) { ! 311: errormsg(WHERE,ERR_ALLOC,"Modem Type",sizeof(char *)*(mdm_types+1)); ! 312: break; } ! 313: if((mdm_file=REALLOC(mdm_file,sizeof(char *)*(mdm_types+1)))==NULL) { ! 314: errormsg(WHERE,ERR_ALLOC,"Modem File",sizeof(char *)*(mdm_types+1)); ! 315: break; } ! 316: if((mdm_type[mdm_types]=MALLOC(strlen(str)+1))==NULL) { ! 317: errormsg(WHERE,ERR_ALLOC,"Modem Typename",sizeof(char *)*(mdm_types+1)); ! 318: break; } ! 319: if((mdm_file[mdm_types]=MALLOC(9))==NULL) { ! 320: errormsg(WHERE,ERR_ALLOC,"Modem Filename",sizeof(char *)*(mdm_types+1)); ! 321: break; } ! 322: strcpy(mdm_type[mdm_types],str); ! 323: sprintf(mdm_file[mdm_types],"%.8s",fname); ! 324: mdm_types++; } ! 325: fclose(stream); ! 326: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.