static int StrToPortRange(const char *str, u_short *low, u_short *high, const char *proto) { char *minus; int res; minus = strchr(str, '-'); if (minus) *minus = '\0'; /* Cheat the const-ness ! */ res = StrToPort(str, low, proto); if (minus) *minus = '-'; /* Cheat the const-ness ! */ if (res == 0) { if (minus) res = StrToPort(minus + 1, high, proto); else *high = *low; } return res; }
//短信唤醒并发送注册命令 void SmsWakeup(void) { static BYTE i,loc; i = 0; while(i<SmsLength) { if (SmsContent[i] == ',') { break; } i++; } if (i>=SmsLength) { goto Fail; } mset(IpAddrStr,0,16); mset(PortStr,0,6); mcpy(IpAddrStr,&SmsContent[3],i-3); // Server Ip Address if (!CheckValidIpAddr()) { goto Fail; } if (!StrToIpAdd((BYTE*)&SysParam[SP_SERVERIP])) { goto Fail; } loc = i; mcpy(PortStr,&SmsContent[loc+1],SmsLength-loc-1); // Server Port if (!CheckValidPort()) { goto Fail; } if (!StrToPort((BYTE*)&SysParam[SP_SERVERPORT])) { goto Fail; } SaveSysParam(); NeedConnSrv = 1; return; Fail: NeedConnSrv = 0; mcpy(&SmsContent[SmsLength],"(Fail)\r\n",8); SmsLength += 8; if (SysParam[SP_MODTYPE] == GSM_MG323) { Send_Pdu_SMS(); } else if (SysParam[SP_MODTYPE] == CDMA_MC323) { Send_Txt_SMS(SmsNumber, SmsContent); } }
static void ParseOption (const char* option, const char* parms) { int i; struct OptionInfo* info; int yesNoValue; int aliasValue; int numValue; u_short uNumValue; const char* strValue; struct in_addr addrValue; int max; char* end; CODE* fac_record = NULL; /* * Find option from table. */ max = sizeof (optionTable) / sizeof (struct OptionInfo); for (i = 0, info = optionTable; i < max; i++, info++) { if (!strcmp (info->name, option)) break; if (info->shortName) if (!strcmp (info->shortName, option)) break; } if (i >= max) { warnx ("unknown option %s", option); Usage (); } uNumValue = 0; yesNoValue = 0; numValue = 0; strValue = NULL; /* * Check parameters. */ switch (info->parm) { case YesNo: if (!parms) parms = "yes"; if (!strcmp (parms, "yes")) yesNoValue = 1; else if (!strcmp (parms, "no")) yesNoValue = 0; else errx (1, "%s needs yes/no parameter", option); break; case Service: if (!parms) errx (1, "%s needs service name or " "port number parameter", option); uNumValue = StrToPort (parms, "divert"); break; case Numeric: if (parms) numValue = strtol (parms, &end, 10); else end = NULL; if (end == parms) errx (1, "%s needs numeric parameter", option); break; case String: strValue = parms; if (!strValue) errx (1, "%s needs parameter", option); break; case None: if (parms) errx (1, "%s does not take parameters", option); break; case Address: if (!parms) errx (1, "%s needs address/host parameter", option); StrToAddr (parms, &addrValue); break; } switch (info->type) { case PacketAliasOption: aliasValue = yesNoValue ? info->packetAliasOpt : 0; PacketAliasSetMode (aliasValue, info->packetAliasOpt); break; case Verbose: verbose = yesNoValue; break; case DynamicMode: dynamicMode = yesNoValue; break; case InPort: inPort = uNumValue; break; case OutPort: outPort = uNumValue; break; case Port: inOutPort = uNumValue; break; case AliasAddress: memcpy (&aliasAddr, &addrValue, sizeof (struct in_addr)); break; case TargetAddress: PacketAliasSetTarget(addrValue); break; case RedirectPort: SetupPortRedirect (strValue); break; case RedirectProto: SetupProtoRedirect(strValue); break; case RedirectAddress: SetupAddressRedirect (strValue); break; case ProxyRule: PacketAliasProxyRule (strValue); break; case InterfaceName: if (ifName) free (ifName); ifName = strdup (strValue); break; case ConfigFile: ReadConfigFile (strValue); break; case LogDenied: logDropped = 1; break; case LogFacility: fac_record = facilitynames; while (fac_record->c_name != NULL) { if (!strcmp (fac_record->c_name, strValue)) { logFacility = fac_record->c_val; break; } else fac_record++; } if(fac_record->c_name == NULL) errx(1, "Unknown log facility name: %s", strValue); break; case PunchFW: SetupPunchFW(strValue); break; } }