void DhcpDiscover() { UCHAR iLen; PCHAR pOptions; PCHAR pBuf; pBuf = Adapter_pUdpBuf; pOptions = (PCHAR)(pBuf + DHCP_OPLIST); iLen = _FillMsgType(pOptions, DHCP_MTYPE_DISCOVER); iLen += _FillClientId((PCHAR)(pOptions + iLen)); iLen += _FillMaxSize((PCHAR)(pOptions + iLen)); #ifdef OEM_INNOMEDIA memcpy((PCHAR)(pOptions + iLen), _cInnomediaParam, INNOMEDIA_PARAM_LEN); iLen += INNOMEDIA_PARAM_LEN; #endif pOptions[iLen] = DHCP_OPCODE_END; iLen ++; // set flags and ciaddr // pBuf[DHCP_FLAGS] = DHCP_FLAG_BROADCAST; pBuf[DHCP_FLAGS] = DHCP_FLAG_UNICAST; pBuf[DHCP_FLAGS+1] = 0; memset((PCHAR)(pBuf+DHCP_CIADDR), 0, IP_ALEN); _SendPacket(iLen); _iDhcpState = DHCP_STATE_SELECTING; // Set this timer to avoid users to wait overly long before give up _iDhcpTimer = 0; }
void IpMsgProtocol::_ProcessSendMessage() { QMutexLocker locker(&m_SendPacketLock); IpMsgSendPacket* pPacket = NULL; for (int i = 0; i < m_SendPackets.size(); ) { pPacket = m_SendPackets.at(i); if(pPacket->IsSendFailed()) { // 将发送失败的消息包干掉 // TODO: 同时在对应的聊天窗口中显示对方已离线的提示 m_SendPackets.removeAt(i); continue; } //handleMsg(rapido::sendPacketList.at(i)); _SendPacket(pPacket); // 如果是广播消息,则无需确定对方是否收到,直接从列表中干掉。 switch(pPacket->getCommand()) { case IPMSG_BR_ENTRY: case IPMSG_BR_EXIT: case IPMSG_BR_ABSENCE: m_SendPackets.removeAt(i); continue; } pPacket->UpdateSendFlag(); ++i; } }
void DhcpDecline() { UCHAR iLen; PCHAR pOptions; PCHAR pBuf; pBuf = Adapter_pUdpBuf; pOptions = (PCHAR)(pBuf + DHCP_OPLIST); iLen = _FillMsgType(pOptions, DHCP_MTYPE_DECLINE); iLen += _FillIPAddr((PCHAR)(pOptions + iLen), _pAssignedIP, DHCP_OPCODE_REQUESTED_IP); iLen += _FillIPAddr((PCHAR)(pOptions + iLen) ,_pDhcpServerID, DHCP_OPCODE_SERVER_ID); iLen += _FillClientId((PCHAR)(pOptions + iLen)); pOptions[iLen] = DHCP_OPCODE_END; iLen ++; // set flags and ciaddr pBuf[DHCP_FLAGS] = 0; pBuf[DHCP_FLAGS+1] = 0; memset((PCHAR)(pBuf+DHCP_CIADDR), 0, IP_ALEN); _SendPacket(iLen); }
void _DhcpReqRenew() { UCHAR iLen; PCHAR pOptions; PCHAR pBuf; pBuf = Adapter_pUdpBuf; pOptions = (PCHAR)(pBuf + DHCP_OPLIST); iLen = _FillMsgType(pOptions, DHCP_MTYPE_REQUEST); iLen += _FillClientId((PCHAR)(pOptions + iLen)); iLen += _FillParamList((PCHAR)(pOptions + iLen)); iLen += _FillMaxSize((PCHAR)(pOptions + iLen)); pOptions[iLen] = DHCP_OPCODE_END; iLen ++; // set flags and ciaddr // pBuf[DHCP_FLAGS] = 0; // pBuf[DHCP_FLAGS+1] = 0; USHORT2PCHAR(0, (PCHAR)(pBuf + DHCP_FLAGS)); memcpy4((PCHAR)(pBuf + DHCP_CIADDR), Sys_pIpAddress); _SendPacket(iLen); }
void _DhcpRequest() { UCHAR iLen; PCHAR pOptions; PCHAR pBuf; pBuf = Adapter_pUdpBuf; pOptions = (PCHAR)(pBuf + DHCP_OPLIST); iLen = _FillMsgType(pOptions, DHCP_MTYPE_REQUEST); iLen += _FillIPAddr((PCHAR)(pOptions + iLen), _pAssignedIP, DHCP_OPCODE_REQUESTED_IP); iLen += _FillIPAddr((PCHAR)(pOptions + iLen) ,_pDhcpServerID, DHCP_OPCODE_SERVER_ID); iLen += _FillClientId((PCHAR)(pOptions + iLen)); iLen += _FillParamList((PCHAR)(pOptions + iLen)); iLen += _FillMaxSize((PCHAR)(pOptions + iLen)); pOptions[iLen] = DHCP_OPCODE_END; iLen ++; // set flags and ciaddr pBuf[DHCP_FLAGS] = DHCP_FLAG_BROADCAST; pBuf[DHCP_FLAGS+1] = 0; memset((PCHAR)(pBuf+DHCP_CIADDR), 0, IP_ALEN); _SendPacket(iLen); _iDhcpTimer = 0; }