void sendEventMessageOption121(int Len , unsigned char *option121Data) { char *buf = (char*)malloc(sizeof(CmsMsgHeader)+Len); //char buf[sizeof(CmsMsgHeader) + Len]= {0}; CmsMsgHeader *msg=(CmsMsgHeader *) buf; unsigned char *Data = (unsigned char *) (msg+1); CmsRet ret; int i; msg->type = CMS_MSG_DHCPC_OPTION121; msg->src = MAKE_SPECIFIC_EID(getpid(), EID_DHCPC); msg->dst = EID_SSK; msg->flags_event = 1; msg->dataLength = Len; //strncpy(Data , option121Data , Len); for(i=0 ; i<Len ; i++) Data[i] = option121Data[i]; if ((ret = cmsMsg_send(msgHandle, msg)) != CMSRET_SUCCESS) { cmsLog_error("could not send out DHCPC_STATUS_CHANGED, ret=%d", ret); } else { cmsLog_notice("sent out DHCPC_OPTION121 (Len=%d)", Len); } free(buf); return; }
void AEI_sendTraceRouteEventMessage(TraceRouteDataMsgBody *pTraceRouteInfo, TraceRouteResult result) { char buf[sizeof(CmsMsgHeader) + sizeof(TraceRouteDataMsgBody)]; CmsMsgHeader *msg=(CmsMsgHeader *) buf; TraceRouteDataMsgBody *traceRouteMsg = (TraceRouteDataMsgBody*)(msg+1); CmsRet ret; int i, strLength; if (!requesterId) { return; } msg->type = CMS_MSG_TRACE_ROUTE_STATE_CHANGE; msg->src = EID_TRACEROUTE; msg->dst = EID_SSK; msg->flags_event = 1; msg->dataLength = sizeof(TraceRouteDataMsgBody); memcpy(traceRouteMsg, pTraceRouteInfo, sizeof(TraceRouteDataMsgBody)); traceRouteMsg->requesterId = requesterId; requesterId = 0; traceRouteMsg->result = result; for (i=0; i<traceRouteMsg->routeHopsNumberOfEntries; i++) { strLength = strlen(traceRouteMsg->routeHops[i].hopRTTimes); traceRouteMsg->routeHops[i].hopRTTimes[strLength-1]='\0'; } #ifdef AEI_VDSL_CUSTOMER_QWEST if (result != Complete && result != Error_MaxHopCountExceeded) #else if (result != Complete) #endif { traceRouteMsg->responseTime = 0; traceRouteMsg->routeHopsNumberOfEntries = 0; } if ((ret = cmsMsg_send(msgHandle, msg)) != CMSRET_SUCCESS) { printf("traceroute send msg Fail\n"); } else { printf("traceroute send msg success\n"); } }
static int myRead(char *outBuf, int inLen) { int readLen = 0; static int xmlCfgLen = 0; static int offset = 0; static CmsMsgHeader *responseMsg=NULL; CmsMsgHeader requestMsg = EMPTY_MSG_HEADER; char *cfgStart; CmsRet ret; if (responseMsg == NULL) { cmsLog_debug("first time, get config file from smd"); /* * This is the first time that we were called. * Send a message to smd to request a copy of the config file. */ requestMsg.src = EID_TFTP; requestMsg.dst = EID_SMD; requestMsg.type = CMS_MSG_GET_CONFIG_FILE; requestMsg.flags_request = 1; if ((ret = cmsMsg_send(msgHandle, &requestMsg)) != CMSRET_SUCCESS) { cmsLog_error("could not send GET_CONFIG_FILE msg to smd."); return -1; } if ((ret = cmsMsg_receive(msgHandle, &responseMsg)) != CMSRET_SUCCESS) { cmsLog_error("could not receive GET_CONFIG_FILE msg from smd."); CMSMEM_FREE_BUF_AND_NULL_PTR(responseMsg); return -1; } xmlCfgLen = (int) responseMsg->dataLength; cmsLog_debug("got config buffer len=%u", xmlCfgLen); } /* config data starts immediately after the header */ cfgStart = (char *) (responseMsg + 1); if (xmlCfgLen <= inLen) readLen = xmlCfgLen; else readLen = inLen; memcpy(outBuf, (cfgStart + offset), readLen); xmlCfgLen -= readLen; offset += readLen; glbUploadSize += readLen; if (xmlCfgLen == 0) { /* done copying all the config data out, free the message */ CMSMEM_FREE_BUF_AND_NULL_PTR(responseMsg); offset = 0; cmsLog_debug("send out entire config buf, free msg"); } return readLen; }