void SSMWaitForInternet_Initialize(void) { // pingHandle = NULL; pingHandle = TCPIP_ICMP_CallbackRegister(&PingCallbackFunction); if(pingHandle == NULL) { FATAL("Failed to install ICMP callback\r\n"); } }
static int CommandPing(_CMDIO_DEV_NODE* pCmdIO, int argc, char** argv) { const void* cmdIoParam = pCmdIO->cmdIoParam; if (argc < 2) { (*pCmdIO->pCmdApi->msg)(cmdIoParam, "Ping Usage: ping <stop> <name/address> <n> <msDelay>\r\n"); return true; } if(strcmp(argv[1], "stop") == 0) { if(icmpCmdStat != TCPIP_PING_CMD_IDLE) { _PingStop(pCmdIO, cmdIoParam); } return true; } if(icmpCmdStat != TCPIP_PING_CMD_IDLE) { (*pCmdIO->pCmdApi->msg)(cmdIoParam, "Ping: command in progress. Retry later.\r\n"); return true; } if(TCPIP_Helper_StringToIPAddress(argv[1], &icmpTargetAddr)) { strncpy(icmpTargetAddrStr, argv[1], sizeof(icmpTargetAddrStr)); icmpTargetHost[0] = '\0'; icmpCmdStat = TCPIP_PING_CMD_DO_PING; } else { // assume host address if(strlen(argv[1]) > sizeof(icmpTargetHost) - 1) { (*pCmdIO->pCmdApi->msg)(cmdIoParam, "Ping: Host name too long. Retry.\r\n"); return true; } strcpy(icmpTargetHost, argv[1]); icmpCmdStat = TCPIP_PING_CMD_DNS_GET; (*pCmdIO->pCmdApi->print)(cmdIoParam, "Ping: resolving host: %s\r\n", icmpTargetHost); } if(hIcmp == 0) { if((hIcmp = TCPIP_ICMP_CallbackRegister(CommandPingHandler)) == 0) { (*pCmdIO->pCmdApi->msg)(cmdIoParam, "Ping: Failed to register ICMP handler\r\n"); return true; } } icmpSequenceNo = SYS_Rand(); icmpIdentifier = SYS_Rand(); icmpReqNo = 0; icmpReqDelay = 0; if(argc >= 3) { icmpReqNo = atoi(argv[2]); } if(argc >= 4) { icmpReqDelay = atoi(argv[3]); } if(icmpReqNo == 0) { icmpReqNo = TCPIP_STACK_COMMANDS_ICMP_ECHO_REQUESTS; } if(icmpReqDelay == 0) { icmpReqDelay = TCPIP_STACK_COMMANDS_ICMP_ECHO_REQUEST_DELAY; } // convert to ticks if(icmpReqDelay < TCPIP_COMMAND_ICMP_ECHO_REQUEST_MIN_DELAY) { icmpReqDelay = TCPIP_COMMAND_ICMP_ECHO_REQUEST_MIN_DELAY; } pIcmpCmd = pCmdIO; icmpCmdIoParam = cmdIoParam; icmpAckRecv = 0; icmpReqCount = 0; _TCPIPStackAsyncHandlerSetParams(icmptickH, 0, icmpReqDelay); return true; }