Exemple #1
0
/////////// for server
void CFileHandler::HandleFileHasOfflineRes(CImPduFileHasOfflineRes* pPdu)
{
	uint32_t req_user_id = pPdu->GetReqUserId();
	uint32_t file_cnt = pPdu->GetFileCnt();
	offline_file_t* file_list = pPdu->GetFileList();
    CDbAttachData attach(pPdu->GetAttachData(), pPdu->GetAttachLen());
	log("HandleFileHasOfflineRes, req_id=%u, file_cnt=%u\n", req_user_id, file_cnt);

	CMsgConn* pConn = CImUserManager::GetInstance()->GetMsgConnByHandle(req_user_id,
                                                                        attach.GetHandle());
    CFileServConn* pFileConn = get_random_file_serv_conn();
    const list<ip_addr_t>* ip_list = NULL;
    if (pFileConn)
    {
        ip_list = pFileConn->GetFileServerIPList();
    }
    else
    {
        log("HandleFileHasOfflineRes, no file server.\n");
    }
    if (pConn) {
        
        CImPduClientFileHasOfflineRes pdu(file_cnt, file_list, ip_list);
        pdu.SetReserved(pPdu->GetReserved());
        pConn->SendPdu(&pdu);
    }
}
Exemple #2
0
void CRouteServConn::_HandleMsgData(CImPduMsgData* pPdu)
{
	uint32_t from_user_id = pPdu->GetFromUserId();
	uint32_t to_user_id = pPdu->GetToUserId();
	log("HandleMsgData, %u->%u\n", from_user_id, to_user_id);
   
    uint32_t seq_no = pPdu->GetRequestId();
    string from_id_url = idtourl(from_user_id);
    string to_id_url = idtourl(to_user_id);
    uint8_t msg_type = pPdu->GetMsgType();
    
    CImPduClientMsgData pdu(seq_no, from_id_url.c_str(), to_id_url.c_str(), pPdu->GetCreateTime(),
    msg_type, pPdu->GetMsgLen(), pPdu->GetMsgData(), pPdu->GetAttachLen(), pPdu->GetAttachData());
  
    CImUser* pFromImUser = CImUserManager::GetInstance()->GetImUserById(from_user_id);
    CImUser* pToImUser = CImUserManager::GetInstance()->GetImUserById(to_user_id);
    if (pFromImUser) {
        pFromImUser->BroadcastClientMsgData(&pdu, NULL, from_user_id);
        pFromImUser->AddOnlineFriend(to_user_id); // 聊过天就通知上下线消息
	}

    if (pToImUser) {
        pToImUser->BroadcastClientMsgData(&pdu, NULL, from_user_id);
        pToImUser->AddOnlineFriend(from_user_id);
    }
}
Exemple #3
0
void CRouteServConn::_HandleGroupP2PMsg(CImPduGroupP2PMessageResponse* pPdu)
{
    uint32_t  result = pPdu->GetResult();
    uint32_t  from_user_id = pPdu->GetReqUserId();
    uint32_t* toUserList = pPdu->GetUserList();
    log("_HandleGroupP2PMsg, from_user_id = %u, result = %u, to_user_cnt = %u.\n", from_user_id, result, pPdu->GetUserCnt());
    
    if(result != 0 || !toUserList)
    return;
    
    for (int i = 0; i < pPdu->GetUserCnt(); ++i) {
        uint32_t to_user_id = toUserList[i];
        CImUser* pToImUser = CImUserManager::GetInstance()->GetImUserById(to_user_id);
        if (pToImUser) {
            uint32_t seq_no = 0;
            string from_id_url = idtourl(from_user_id);
            string to_id_url = idtourl(to_user_id);
            
            CImPduClientP2PCmdMsg pdu(seq_no, from_id_url.c_str(), to_id_url.c_str(), pPdu->GetMsgDataLen(),
                                      pPdu->GetMsgData());
            pToImUser->BroadcastPdu(&pdu);
        }
    }

}
Exemple #4
0
nsresult
BluetoothDaemonAvrcpModule::RegisterNotificationRspCmd(
  BluetoothAvrcpEvent aEvent, BluetoothAvrcpNotification aType,
  const BluetoothAvrcpNotificationParam& aParam,
  BluetoothAvrcpResultHandler* aRes)
{
  MOZ_ASSERT(NS_IsMainThread());

  nsAutoPtr<BluetoothDaemonPDU> pdu(
    new BluetoothDaemonPDU(SERVICE_ID, OPCODE_REGISTER_NOTIFICATION_RSP,
                           1 + // Event
                           1 + // Type
                           1 + // Data length
                           256)); // Maximum data length

  nsresult rv = PackPDU(aEvent, aType,
                        BluetoothAvrcpEventParamPair(aEvent, aParam), *pdu);
  if (NS_FAILED(rv)) {
    return rv;
  }
  rv = Send(pdu, aRes);
  if (NS_FAILED(rv)) {
    return rv;
  }
  unused << pdu.forget();
  return NS_OK;
}
Exemple #5
0
nsresult
BluetoothDaemonAvrcpModule::ListPlayerAppAttrRspCmd(
  int aNumAttr, const BluetoothAvrcpPlayerAttribute* aPAttrs,
  BluetoothAvrcpResultHandler* aRes)
{
  MOZ_ASSERT(NS_IsMainThread());

  nsAutoPtr<BluetoothDaemonPDU> pdu(
    new BluetoothDaemonPDU(SERVICE_ID, OPCODE_LIST_PLAYER_APP_ATTR_RSP,
                           1 + // # Attributes
                           aNumAttr)); // Player attributes

  nsresult rv = PackPDU(
    PackConversion<int, uint8_t>(aNumAttr),
    PackArray<BluetoothAvrcpPlayerAttribute>(aPAttrs, aNumAttr), *pdu);
  if (NS_FAILED(rv)) {
    return rv;
  }
  rv = Send(pdu, aRes);
  if (NS_FAILED(rv)) {
    return rv;
  }
  unused << pdu.forget();
  return NS_OK;
}
Exemple #6
0
// friend online/off-line notify
void CRouteServConn::_HandleFriendStatusNotify(CImPduFriendStatusNotify* pPdu)
{
	uint32_t user_id = pPdu->GetFromUserId();
	uint32_t user_status = pPdu->GetFromUserStatus();
	uint32_t friend_cnt = pPdu->GetFriendCnt();
	uint32_t* friend_id_list = pPdu->GetFriendIdList();
	string user_id_url = idtourl(user_id);

	log("HandleFriendStatusNotify, from_id=%u, status=%u\n", user_id, user_status);

	// send friend online message to client
	CImPduClientFriendNotify pdu(user_id_url.c_str(), user_status);

	for (uint32_t i = 0; i < friend_cnt; ++i) {
        CImUser* pImUser = CImUserManager::GetInstance()->GetImUserById(friend_id_list[i]);
		if (pImUser) {
			pImUser->BroadcastPdu(&pdu);

			if (user_status == USER_STATUS_ONLINE) {
				pImUser->AddOnlineFriend(user_id);
			} else if (user_status == USER_STATUS_OFFLINE){
				pImUser->RemoveOnlineFriend(user_id);
			}
		}
	}
}
HCIACLPDU AclEngine::Implementation::ChannelList::Channel::Send::getPdu(bool &isSendablePdu)
{
    CriticalSection::Lock lock(mCs);
    HCIACLPDU pdu(null_pdu);

    while (true)
    {
        fillQueue();
        if (queue.empty())
        {
            isSendablePdu = false;
            return pdu;
        }
        else if (queue.front()->getPdu(pdu))
        {
            ++tokensUsed;
            isSendablePdu = true;
            return pdu;
        }
        else
        {
            queue.pop_front();
        }
    }
}
Exemple #8
0
// Fill remaining unused seats. These seats will have the
// same amount of tournament chips and they will be blinded off
void CTable::fillSeats(const CChips& chips)
{
  printf("CTable::fillSeats\n");

  SingleLock l(&tableMutex_);
  l.lock();

  int numPlayers = tableMax_ - countPlayersRaw();

  for (int i = 0; (i < MaxPlayers) && (numPlayers > 0); i++)
  {
    if (players_[i]->matchState(PLAYER_STATE_UNUSED))
    {
      char buf[32];
      sprintf(buf, "Open Seat %i", i + 1);
      players_[i]->setPlayer(0,
                             buf,
                             buf,
                             chips,
                             0);
      players_[i]->stateChange(PLAYER_STATE_BOUGHTIN);
      players_[i]->setIsZombie(true);
      players_[i]->setIsFreeSeat(true);

      CpduPlayerInfo pdu(this);
      pdu.sendPlayerInfo(players_[i]);

      numPlayers--;
    }
  }
}
Exemple #9
0
void Cplm::allIn(CPlayer* player, const CChips& pay)
{
    /*
     * 1) set player->state(ALLIN)
     * 2) create a new side pot
     * 3) move excess chips from the original pot to the side pot, and
     * 4) make players eligible for active pot (besides all-in player) eligible
     *    for side pot
     * 5) send allin pdu
     */
    CpduAllIn pdu(table_);

    player->stateChange(PLAYER_STATE_ALLIN);

    splitPot(player, pay);

    pdu.sendAllIn(player, pay);

#ifdef DEBUG_POT_
    int i = 0;
    for (Cpot* p = table_->getMainPot(); p != NULL; p = p->getNext())
    {
        printf("Pot %d ", i++);
        p->print();
    }
#endif
}
Exemple #10
0
void CRouteConn::_HandleUserClientType(CImPduUserClientTypeRequest *pPdu)
{
    uint32_t user_id = pPdu->GetUserId();
    uint32_t attach_len = pPdu->GetAttachLen();
    uchar_t* attach_data = pPdu->GetAttachData();
    log("HandleUserClientType, user_id = %u\n", user_id);
    RouteConnMap_t* pConnMap = get_route_conns(user_id);
    uint32_t client_type_flag = 0x00;
    if (pConnMap != NULL)
    {
        RouteConnMap_t::iterator it = pConnMap->begin();
        for (; it != pConnMap->end(); it++)
        {
            if (it->first != this)
            {
                uint32_t client_type_flag_tmp = it->second;
                client_type_flag |= client_type_flag_tmp;
            }
        }
    }
    
    CImPduUserClientTypeResponse pdu(user_id, client_type_flag, attach_len, attach_data);
    pdu.SetReserved(pPdu->GetReserved());
    SendPdu(&pdu);
}
Exemple #11
0
void CRouteConn::_HandleUsersStatusRequest(CImPduUsersStatusRequest* pPdu)
{
	uint32_t request_id = pPdu->GetRequestId();
	uint32_t query_count = pPdu->GetQueryCount();
	log("HandleUserStatusReq, req_id=%u, query_count=%u\n", request_id, query_count);

	const list<uint32_t>& query_list = pPdu->GetQueryList();
	list<user_stat_t> result_list;
	user_stat_t status;
	for(list<uint32_t>::const_iterator itQ=query_list.begin(); itQ!=query_list.end(); ++itQ)
	{
		UserStatMap_t::iterator it = g_rs_user_map.find(*itQ);
		if (it != g_rs_user_map.end()) {
			status.status = it->second.status;
		}
		else
		{
			status.status = USER_STATUS_OFFLINE;
		}
		status.user_id = *itQ;
		result_list.push_back(status);
	}

	// send back query user status
	CImPduUsersStatusResponse pdu(request_id, result_list);
	pdu.SetReserved(pPdu->GetReserved());
	SendPdu(&pdu);
}
Exemple #12
0
void CDBServConn::_HandleDBQueryResponse(CImPduDBQueryResponse* pPdu)
{
	uint32_t user_id = pPdu->GetUserid();
	uint32_t seq_no = pPdu->GetSeqNo();
    CDbAttachData attach_data(pPdu->GetAttachData(), pPdu->GetAttachLen());
	uint32_t handle = attach_data.GetHandle();
    CMsgConn* pMsgConn = CImUserManager::GetInstance()->GetMsgConnByHandle(user_id, handle);
	log("HandleDBQueryResp, user_id=%u, seq_no=%u\n", user_id, seq_no);

	if (pMsgConn && pMsgConn->IsOpen()) {
		CImPduClientDBQueryResponse pdu(seq_no, pPdu->GetResultLen(), pPdu->GetResultData());
		pMsgConn->SendPdu(&pdu);
	}
}
/**
 * @brief Creates an instance of Normal traffic event.
 *
 * @param pduSize Size of PDU to generate.
 * @param pduContents Reference to Entity object that will be carried by the token.
 * @param recordRoute True if this generated token should record the route it follows. False otherwise. Default is false.
 *
 * @return PDU that was generated, per the class constructor parameters and if generator is On. Otherwise, returns nullptr.
 */
std::shared_ptr<ProtocolDataUnit> NormalTrafficGenerator::createInstanceTrafficEventPdu(unsigned int pduSize, std::shared_ptr<Entity> pduContents,
																						   bool recordRoute) {
	// Creates a PDU and assigns it class member values and a unique ID obtained from simulatorGlobals.
	std::shared_ptr<Token> token = TrafficGenerator::createInstanceTrafficEvent(pduContents, recordRoute);
	if (token == nullptr) {
		return nullptr;
	}
	std::shared_ptr<ProtocolDataUnit> pdu(new ProtocolDataUnit(token, pduSize));
	//std::shared_ptr<ProtocolDataUnit> pdu(new ProtocolDataUnit(TrafficGenerator::createInstanceTrafficEvent(pduContents, recordRoute), pduSize));
	if (pdu != nullptr) {
		scheduler.schedule(Event(generateNormalVariate(), eventType, pdu));
	}
	return pdu;
}
/**
 * @brief Creates an instance of constant rate traffic event.
 *
 * @param pduSize Size of PDU to generate.
 * @param explicitRoute Vector containing a list of Entity objects representing the route to be followed by a token/PDU.
 * @param recordRoute True if this generated token should record the route it follows. False otherwise. Default is false.
 *
 * @return PDU that was generated, per the class constructor parameters and if generator is On. Otherwise, returns nullptr.
 */
std::shared_ptr<ProtocolDataUnit> ConstantRateTrafficGenerator::createInstanceTrafficEventPdu(unsigned int pduSize, std::vector<std::shared_ptr<Entity>> explicitRoute,
																						   bool recordRoute) {
	// Creates a PDU and assigns it class member values and a unique ID obtained from simulatorGlobals.
	std::shared_ptr<Token> token = TrafficGenerator::createInstanceTrafficEvent(explicitRoute, recordRoute);
	if (token == nullptr) {
		return nullptr;
	}
	//std::shared_ptr<ProtocolDataUnit> pdu(new ProtocolDataUnit(TrafficGenerator::createInstanceTrafficEvent(explicitRoute, recordRoute), pduSize));
	std::shared_ptr<ProtocolDataUnit> pdu(new ProtocolDataUnit(token, pduSize));
	if (pdu != nullptr) {
		scheduler.schedule(Event(interval, eventType, pdu));
	}
	return pdu;
}
Exemple #15
0
void CFileHandler::HandleClientFileRequest(CMsgConn* pMsgConn, CImPduClientFileRequest* pPdu)
{
	string from_id_url(pPdu->GetFromId(), pPdu->GetFromIdLen());
	uint32_t from_id = urltoid(from_id_url.c_str());
	string to_id_url(pPdu->GetToId(), pPdu->GetToIdLen());
	uint32_t to_id = urltoid(to_id_url.c_str());
	string file_name(pPdu->GetFileName(), pPdu->GetFileNameLen());
	uint32_t file_size = pPdu->GetFileSize();
	log("HandleClientFileRequest, %u->%u, fileName: %s\n", from_id, to_id, file_name.c_str());

    CPduAttachData attach(ATTACH_TYPE_HANDLE, pMsgConn->GetHandle(), 0, NULL, 0);

    CImUser* pUser = CImUserManager::GetInstance()->GetImUserById(to_id);
    if (pUser)
    {
        uint32_t client_type_flag = pUser->GetClientTypeFlag();
        //to_user has pc_client in this msg_server
        if ((client_type_flag & CLIENT_TYPE_FLAG_BOTH) == CLIENT_TYPE_FLAG_PC)
        {
            CFileServConn* pFileConn = get_random_file_serv_conn();
            if (pFileConn)
            {
                CImPduMsgFileTransferReq pdu(from_id, to_id, file_name.c_str(), file_size,
                                    FILE_TYPE_ONLINE, attach.GetLength(), attach.GetBuffer());
                pdu.SetReserved(pPdu->GetReserved());
                pFileConn->SendPdu(&pdu);
            }
            else
            {
                log("HandleClientFileRequest, no file server.\n");
                CImPduClientFileResponse pdu2(REFUSE_REASON_NO_FILE_SERVER, from_id_url.c_str(),
                                              to_id_url.c_str(), file_name.c_str(), NULL, NULL, 0);
                pdu2.SetReserved(pPdu->GetReserved());
                pMsgConn->SendPdu(&pdu2);
            }
            return;
        }
    }
    else
    {
        //no pc_client in this msg_server, check it from route_server
        CRouteServConn* pConn = get_route_serv_conn();
        CPduAttachData pduAttachData(ATTACH_TYPE_HANDLE_AND_PDU, pMsgConn->GetHandle(),
                                     pPdu->GetLength(), pPdu->GetBuffer());
        CImPduUserClientTypeRequest pdu3(to_id, pduAttachData.GetLength(), pduAttachData.GetBuffer());
        pdu3.SetReserved(pPdu->GetReserved());
        pConn->SendPdu(&pdu3);
    }
}
Exemple #16
0
void CRouteServConn::_HandleUsersStatusResponse(CImPduUsersStatusResponse* pPdu)
{
	uint32_t request_id = pPdu->GetRequestId();
	uint32_t result_count = pPdu->GetResultCount();
	const list<user_stat_t>& result_list = pPdu->GetQueryResult();
	log("HandleUsersStatusResp, req_id=%u, query_count=%u\n", request_id, result_count);
    CDbAttachData attach_data(pPdu->GetAttachData(), pPdu->GetAttachLen());
	uint32_t handle = attach_data.GetHandle();

    CMsgConn* pToConn = CImUserManager::GetInstance()->GetMsgConnByHandle(request_id,handle);
	if (pToConn) {
		CImPduClientUsersStatusResponse pdu(result_list);
		pToConn->SendPdu(&pdu);
	}
}
/**
 * @brief Creates an instance of constant rate traffic event with PDU.
 *
 * @param pduSize Size of PDU to generate.
 * @param recordRoute True if this generated token should record the route it follows. False otherwise. Default is false.
 *
 * @return PDU that was generated, per the class constructor parameters and if generator is On. Otherwise, returns nullptr.
 */
std::shared_ptr<ProtocolDataUnit> ConstantRateTrafficGenerator::createInstanceTrafficEventPdu(unsigned int pduSize, bool recordRoute) {
	// Creates a PDU and assigns it class member values and a unique ID obtained from simulatorGlobals.
	// Notice that the base class member function "createInstance..." is used here instead of the derived override:
	// the derived override schedules an event, and that is undesired here, since an event can only be scheduled "after" the PDU is created.
	std::shared_ptr<Token> token = TrafficGenerator::createInstanceTrafficEvent(recordRoute);
	if (token == nullptr) {
		return nullptr;
	}
	//std::shared_ptr<ProtocolDataUnit> pdu(new ProtocolDataUnit(TrafficGenerator::createInstanceTrafficEvent(recordRoute), pduSize));
	std::shared_ptr<ProtocolDataUnit> pdu(new ProtocolDataUnit(token, pduSize));
	if (pdu != nullptr) {
		scheduler.schedule(Event(interval, eventType, pdu));
	}
	return pdu;
}
Exemple #18
0
void CFileHandler::HandleClientFileDelOfflineReq(CImPduClientFileDelOfflineReq* pPdu)
{
	string from_id_url(pPdu->GetFromId(), pPdu->GetFromIdLen());
	string to_id_url(pPdu->GetToId(), pPdu->GetToIdLen());
	uint32_t from_id = urltoid(from_id_url.c_str());
	uint32_t to_id = urltoid(to_id_url.c_str());
    string task_id(pPdu->GetTaskId(), pPdu->GetTaskIdLen());
	log("HandleClientFileDelOfflineReq, %u->%u, task_id=%s\n", from_id, to_id, task_id.c_str());

	CDBServConn* pDbConn = get_db_serv_conn();
	if (pDbConn) {
		CImPduFileDelOfflineReq pdu(to_id, from_id, to_id, task_id.c_str());
		pDbConn->SendPdu(&pdu);
	}
}
Exemple #19
0
void CDBServConn::_HandleDepartmentResponse(CImPduDepartmentResponse *pPdu)
{
    uint32_t req_user_id = pPdu->GetReqUserId();
    uint32_t depart_cnt = pPdu->GetDepartCnt();
    department_info_t* depart_list = pPdu->GetDepartList();
    log("HandleDepartmentResp, req_user_id=%u, depart_cnt=%u\n", req_user_id, depart_cnt);
    CDbAttachData attach_data(pPdu->GetAttachData(), pPdu->GetAttachLen());
    uint32_t handle = attach_data.GetHandle();
    CMsgConn* pMsgConn = CImUserManager::GetInstance()->GetMsgConnByHandle(req_user_id, handle);
	if (pMsgConn && pMsgConn->IsOpen()) {
		CImPduClientDepartmentResponse pdu(depart_cnt, depart_list);
		pdu.SetReserved(pPdu->GetReserved());
		pMsgConn->SendPdu(&pdu);
	}

}
Exemple #20
0
void CRouteServConn::OnConfirm()
{
	log("connect to route server success\n");
	m_bOpen = true;
	m_connect_time = get_tick_count();
	g_route_server_list[m_serv_idx].reconnect_cnt = MIN_RECONNECT_CNT / 2;

	if (g_master_rs_conn == NULL) {
		update_master_route_serv_conn();
	}

	list<user_conn_stat_t> online_user_list;
    CImUserManager::GetInstance()->GetOnlineUserInfo(&online_user_list);
	CImPduOnlineUserInfo pdu(&online_user_list);
	SendPdu(&pdu);
}
Exemple #21
0
void CRouteServConn::_HandleUserStatusResponse(CImPduUserStatusResponse* pPdu)
{
	uint32_t request_id = pPdu->GetRequestId();
	uint32_t query_id = pPdu->GetQueryId();
	uint32_t status = pPdu->GetStatus();
    CDbAttachData attach_data(pPdu->GetAttachData(), pPdu->GetAttachLen());
	uint32_t handle = attach_data.GetHandle();
	log("HandleUserStatusResp, req_id=%u, query_id=%u, status=%u\n", request_id, query_id, status);

	CMsgConn* pToConn = CImUserManager::GetInstance()->GetMsgConnByHandle(request_id,handle);
	if (pToConn) {
		char* query_id_url = idtourl(query_id);
		CImPduClientUserStatusResponse pdu(query_id_url, status);
		pToConn->SendPdu(&pdu);
	}
}
Exemple #22
0
void CDBServConn::_HandleUnreadMsgCountResponse(CImPduUnreadMsgCountResponse* pPdu)
{
	uint32_t to_user_id = pPdu->GetToUserId();
	UserUnreadMsgCnt_t* user_unread_list = pPdu->GetUserUnreadList();
	uint32_t user_unread_cnt = pPdu->GetUserUnreadCnt();
    CDbAttachData attach_data(pPdu->GetAttachData(), pPdu->GetAttachLen());
	uint32_t handle = attach_data.GetHandle();
	log("HandleUnreadMsgCntResp, userId=%u, cnt=%u\n", to_user_id,  user_unread_cnt);

	CMsgConn* pMsgConn = CImUserManager::GetInstance()->GetMsgConnByHandle(to_user_id, handle);
    
	if (pMsgConn && pMsgConn->IsOpen()) {
		CImPduClientUnreadMsgCntResponse pdu(user_unread_cnt, user_unread_list);
		pdu.SetReserved(pPdu->GetReserved());
		pMsgConn->SendPdu(&pdu);
	}
}
Exemple #23
0
void CRouteServConn::_HandleUserClientTypeResponse(CImPduUserClientTypeResponse *pPdu)
{
    uint32_t client_type_flag = pPdu->GetClientTypeFlag();
    uint32_t attach_len = pPdu->GetAttachLen();
    uchar_t* attach_data = pPdu->GetAttachData();
    CPduAttachData pduAttachData(attach_data, attach_len);
    
    CImPduClientFileRequest pdu(pduAttachData.GetPdu(), pduAttachData.GetPduLength());
    string from_id_url(pdu.GetFromId(), pdu.GetFromIdLen());
	uint32_t from_id = urltoid(from_id_url.c_str());
	string to_id_url(pdu.GetToId(), pdu.GetToIdLen());
	uint32_t to_id = urltoid(to_id_url.c_str());
	string file_name(pdu.GetFileName(), pdu.GetFileNameLen());
	uint32_t file_size = pdu.GetFileSize();
    uint32_t handle = pduAttachData.GetHandle();
    
    log("HandleUserClientTypeResponse, from_user_id: %u, to_user_id: %u, file_name: %s\n",
        from_id, to_id, file_name.c_str());

    uint32_t trans_mode = FILE_TYPE_OFFLINE;
    if ((client_type_flag & CLIENT_TYPE_FLAG_BOTH) == CLIENT_TYPE_FLAG_PC)
    {
        trans_mode = FILE_TYPE_ONLINE;
    }

    CPduAttachData attach(ATTACH_TYPE_HANDLE, handle, 0, NULL, 0);
    CImPduMsgFileTransferReq pdu2(from_id, to_id, file_name.c_str(), file_size,
                                 trans_mode, attach.GetLength(), attach.GetBuffer());
    pdu2.SetReserved(pPdu->GetReserved());
    CFileServConn* pConn = get_random_file_serv_conn();
    if (pConn) {
        pConn->SendPdu(&pdu2);
    }
    else
    {
        log("HandleUserClientTypeResponse, no file server\n");
        CImPduClientFileResponse pdu3(REFUSE_REASON_NO_FILE_SERVER, from_id_url.c_str(), to_id_url.c_str(), file_name.c_str(), NULL, NULL, 0);
        pdu3.SetReserved(pPdu->GetReserved());
        CMsgConn* pMsgConn = CImUserManager::GetInstance()->GetMsgConnByHandle(from_id,handle);
        if (pMsgConn)
        {
            pMsgConn->SendPdu(&pdu3);
        }
    }
}
Exemple #24
0
void CFileHandler::HandleClientFileHasOfflineReq(CMsgConn* pMsgConn, CImPduClientFileHasOfflineReq* pPdu)
{
	uint32_t req_user_id = pMsgConn->GetUserId();
	log("HandleClientFileHasOfflineReq, req_id=%u\n", req_user_id);

    CDbAttachData attach_data(ATTACH_TYPE_HANDLE, pMsgConn->GetHandle(), 0);
	CDBServConn* pDbConn = get_db_serv_conn();
	if (pDbConn) {
		CImPduFileHasOfflineReq pdu(req_user_id, attach_data.GetLength(), attach_data.GetBuffer());
		pdu.SetReserved(pPdu->GetReserved());
		pDbConn->SendPdu(&pdu);
	} else {
		log("warning no DB connection available\n");
		CImPduClientFileHasOfflineRes pdu;
		pdu.SetReserved(pPdu->GetReserved());
		pMsgConn->SendPdu(&pdu);
	}
}
Exemple #25
0
void CFileHandler::HandleClientFileAddOfflineReq(CImPduClientFileAddOfflineReq* pPdu)
{
	string from_id_url(pPdu->GetFromId(), pPdu->GetFromIdLen());
	string to_id_url(pPdu->GetToId(), pPdu->GetToIdLen());
    string task_id(pPdu->GetTaskId(), pPdu->GetTaskIdLen());
	string file_name(pPdu->GetFileName(), pPdu->GetFileNameLen());
	uint32_t file_size = pPdu->GetFileSize();
	uint32_t from_id = urltoid(from_id_url.c_str());
	uint32_t to_id = urltoid(to_id_url.c_str());
	log("HandleClientFileAddOfflineReq, %u->%u, task_id: %s, file_name: %s, size: %u \n",
			from_id, to_id, task_id.c_str(), file_name.c_str(), file_size);

	CDBServConn* pDbConn = get_db_serv_conn();
	if (pDbConn) {
		CImPduFileAddOfflineReq pdu(from_id, from_id, to_id, task_id.c_str(), file_name.c_str(), file_size);
		pDbConn->SendPdu(&pdu);
	}
}
Exemple #26
0
void CRouteConn::_HandleUserStatusRequest(CImPduUserStatusRequest* pPdu)
{
	uint32_t request_id = pPdu->GetRequestId();
	uint32_t query_id = pPdu->GetQueryId();
	uint32_t attach_len = pPdu->GetAttachLen();
	uchar_t* attach_data = pPdu->GetAttachData();
	log("HandleUserStatusReq, req_id=%u, query_id=%u\n", request_id, query_id);

	uint32_t status = USER_STATUS_OFFLINE;
	UserStatMap_t::iterator it = g_rs_user_map.find(query_id);
	if (it != g_rs_user_map.end()) {
		status = it->second.status;
	}

	// send back query user status
	CImPduUserStatusResponse pdu(request_id, query_id, status, attach_len, attach_data);
	pdu.SetReserved(pPdu->GetReserved());
	SendPdu(&pdu);
}
int main()
{
    char *data = const_cast<char *>("hello 0world");
    uint32_t data_len = strlen(data);

    CImPduClientData pdu(data, data_len);
    printf("pdu lenght: %d\n", pdu.GetLength());

    uchar_t *buf = pdu.GetBuffer();

    int i = 0;
    for (i = 0; i < pdu.GetLength(); i++) {
    	printf("%X\n", buf[i]);
    }
    cout << endl;


	return 0;
}
Exemple #28
0
void CFileHandler::HandleFileNotify(CImPduFileNotify *pPdu)
{
    uint32_t from_user_id = pPdu->GetFromId();
    uint32_t to_user_id = pPdu->GetToId();
    string file_name(pPdu->GetFileName(), pPdu->GetFileNameLen());
    uint32_t file_size = pPdu->GetFileSize();
    string task_id(pPdu->GetTaskId(), pPdu->GetTaskIdLen());
    string listen_ip(pPdu->GetListenIp(), pPdu->GetListenIpLen());
    uint32_t listen_port = pPdu->GetListenPort();
    log("HandleFileNotify, from_id: %u, to_id: %u, file_name: %s, task_id: %s, file_server_ip: %s,\
        file_server_port: %u.\n", from_user_id, to_user_id, file_name.c_str(), task_id.c_str(),
        listen_ip.c_str(), listen_port);
    CImUser* pUser = CImUserManager::GetInstance()->GetImUserById(to_user_id);
    if (pUser) {
        CImPduClientFileNotify pdu(idtourl(from_user_id), idtourl(to_user_id), file_name.c_str(),
                                   file_size, task_id.c_str(), listen_ip.c_str(), listen_port);
        pUser->BroadcastPdu(&pdu);
    }
}
Exemple #29
0
void CRouteServConn::_HandleP2PMsg(CImPduP2PMsg* pPdu)
{
	uint32_t from_user_id = pPdu->GetFromUserId();
	uint32_t to_user_id = pPdu->GetToUserId();
    uint32_t seq_no = pPdu->GetSeqNo();
    string from_id_url = idtourl(from_user_id);
    string to_id_url = idtourl(to_user_id);
    CImPduClientP2PCmdMsg pdu(seq_no, from_id_url.c_str(), to_id_url.c_str(), pPdu->GetMsgLen(), pPdu->GetMsgData());
	log("HandleP2PMsg, %u->%u\n", from_user_id, to_user_id);

    CImUser* pFromImUser = CImUserManager::GetInstance()->GetImUserById(from_user_id);
    CImUser* pToImUser = CImUserManager::GetInstance()->GetImUserById(to_user_id);
	if (pFromImUser) {
		pFromImUser->BroadcastPdu(&pdu);
	}
    
	if (pToImUser) {
		pToImUser->BroadcastPdu(&pdu);
	}
}
Exemple #30
0
void CDBServConn::_HandleRemoveSessionResponse(CImPduRemoveSessionResponse* pPdu)
{
	uint32_t req_user_id = pPdu->GetReqUserId();
	uint32_t result = pPdu->GetResult();
	uint32_t session_type = pPdu->GetSessionType();
	uint32_t session_id = pPdu->GetSessionId();
	log("HandleRemoveSessionResp, req_user_id=%u, result=%u, session_id=%u, type=%u\n",
			req_user_id, result, session_id, session_type);

    
    CDbAttachData attach_data(pPdu->GetAttachData(), pPdu->GetAttachLen());
	uint32_t handle = attach_data.GetHandle();
    CMsgConn* pMsgConn = CImUserManager::GetInstance()->GetMsgConnByHandle(req_user_id, handle);
	if (pMsgConn && pMsgConn->IsOpen()) {
		char* session_id_url = idtourl(session_id);
		CImPduClientRemoveSessionResponse pdu(result, session_type, session_id_url);
		pdu.SetReserved(pPdu->GetReserved());
		pMsgConn->SendPdu(&pdu);
	}
}