static BOOL modem_command (const char *cmd, const char *resp, int timeout) { DWORD timer; int len = cmd ? strlen (cmd) : strlen (resp); if (cmd) rc = pkt_send (cmd, len); /**<\todo Bypass PKTDRVR ? */ if (rc < len || !_eth_is_init) return (FALSE); timer = set_timeout (1000 * timeout); while (!chk_timeout(timer)) { char *pkt = (char*) _eth_arrived (NULL NULL); if (!pkt) continue; outsn (pkt, len); /* print the modem echo */ _eth_free (pkt, type); return (strncmp(pkt,resp,strlen(resp)) == 0); /* got modem response */ } return (FALSE); }
/* * _dorarp - Checks global variable _rarptimeout * returns 1 on success and sets ip address */ int _dorarp (void) { DWORD rarptimeout = set_timeout (1000 * _rarptimeout); WORD magictimeout = Random (7000, 14000); outs (_LANG("Configuring through RARP...")); while (1) { DWORD sendtimeout; if (!_rarp_request()) break; sendtimeout = set_timeout (magictimeout); magictimeout += Random (1000, 7000); while (!chk_timeout(sendtimeout)) { const struct rarp_Header *rarp; WORD eth_type; BOOL bcast; if (chk_timeout(rarptimeout)) return (0); WATT_YIELD(); rarp = (rarp_Header*) _eth_arrived (ð_type, &bcast); if (!rarp) continue; DEBUG_RX (NULL, rarp); if (eth_type == RARP_TYPE && !bcast && rarp->opcode == RARP_REPLY && rarp->protType == IP4_TYPE && !memcmp(rarp->dstEthAddr,_eth_addr,sizeof(mac_address))) { my_ip_addr = intel (rarp->dstIPAddr); _eth_free (rarp); return (1); } _eth_free (rarp); } } return (0); }