ue_stmsi_map_.insert(std::make_pair(stmsi_key, sp_local_user_info));什么意思
时间: 2023-08-15 11:03:25 浏览: 116
这行代码是向`ue_stmsi_map_`中插入一个键值对,其中`stmsi_key`是一个类型为`STMSI_T`的对象,`sp_local_user_info`是一个`SP_LocalUserInfo`类型的智能指针。
`std::make_pair(stmsi_key, sp_local_user_info)`是一个工厂函数,用于创建一个`std::pair<STMSI_T, SP_LocalUserInfo>`类型的对象,其中`STMSI_T`是键的类型,`SP_LocalUserInfo`是值的类型。这个`std::pair`对象表示一个键值对,将其插入到`ue_stmsi_map_`中,就可以将键值对存储在map中。
因此,这行代码的意思是将一个键值对插入到`ue_stmsi_map_`中,其中键为`stmsi_key`,值为`sp_local_user_info`。
相关问题
uint64_t S1mmeSession::UpdateUserDataSTMSIChange(S1APNode* p_node, uint64_t stmsi) { if(!stmsi) return 0; uint64_t old_stmsi = 0; //如果stmsi没有改变, 则直接返回 SPUserInfo& sp_local_user_info = p_node->GetUserInfo(); if (sp_local_user_info->HasSTMSI() && sp_local_user_info->GetSTMSI() == stmsi) { return old_stmsi; } //删除 old stmsi if (sp_local_user_info->HasSTMSI()) { old_stmsi = sp_local_user_info->GetSTMSI(); STMSI_Iter iter = ue_stmsi_map_.find(old_stmsi); if (iter != ue_stmsi_map_.end()) { ue_stmsi_map_.erase(iter); } DeleteFromStmsiTimeoutMap(old_stmsi); } //删除可能的 paging 干扰 StmsiWithMmegi_T old_stmsi_key(old_stmsi); S1APNode** pp_paging = p_stmsi_paging_map_->GetData(old_stmsi_key); if (pp_paging != NULL) { if (handle_session_version_ == S1MME_SESSION_VERSION_CHINA_TELECOM) { CtOutputNode(*pp_paging, false); } else { (*pp_paging)->DeletePagingKqi(); } p_stmsi_paging_map_->DeleteData(old_stmsi_key, p_s1ap_node_allocator_); } StmsiWithMmegi_T new_stmsi_key(stmsi); pp_paging = p_stmsi_paging_map_->GetData(new_stmsi_key); if (pp_paging != NULL) { if(handle_session_version_ == S1MME_SESSION_VERSION_CHINA_TELECOM) { CtOutputNode(*pp_paging, false); } else { (*pp_paging)->DeletePagingKqi(); } p_stmsi_paging_map_->DeleteData(new_stmsi_key, p_s1ap_node_allocator_); } //删除可能的 new_stmsi 干扰 STMSI_Iter iter = ue_stmsi_map_.find(stmsi); if (iter != ue_stmsi_map_.end()) { iter->second->flag_.stmsi = false; iter->second->index_.stmsi =0; ue_stmsi_map_.erase(iter); } UpdateFromStmsiTimeoutMap(stmsi, current_time_.tv_sec, true); //插入 new_stmsi(local user info) ue_stmsi_map_.insert(std::make_pair(stmsi, sp_local_user_info)); sp_local_user_info->SetSTMSI(stmsi); return old_stmsi; }什么意思
这段代码是一个 C++ 函数,用于在 S1mmeSession 中更新用户数据的 STMSI 字段。STMSI 是一个标识用户的短期移动子系统标识,如果 STMSI 发生改变,则需要更新用户的信息。函数接受两个参数,一个是 S1APNode 指针,一个是 uint64_t 类型的新 STMSI 值。函数首先检查新 STMSI 是否为 0,如果是则直接返回。然后检查新 STMSI 是否与原来的 STMSI 相同,如果相同则也直接返回。如果新 STMSI 不同于原来的 STMSI,则需要进行一系列删除和插入操作,以更新用户信息。其中包括删除旧的 STMSI 并从超时映射表中删除,删除可能的 paging 干扰,删除可能的新 STMSI 干扰,更新超时映射表并插入新的 STMSI。最后函数返回旧的 STMSI 值。
int S1mmeSession::InsertToS1mmeUserInfo(S1UserInfo_T* s1_user_info, uint64_t tv_sec) { S1mmeUserInfo* user_info = AllocateS1mmeUserInfo(); user_info->SetIMSI(s1_user_info->imsi); user_info->SetSTMSI(s1_user_info->stmsi); user_info->SetAPN(s1_user_info->apn); user_info->SetClientIP(s1_user_info->user_ip); StmsiWithMmegi_T stmsi_key(s1_user_info->stmsi); #ifdef KEY_INFO_VER_2 if (s1_user_info->has_kasme) { user_info->SetCipheringAlgorithm(s1_user_info->ciphering_algorithm); user_info->nas_.mme_seq_num = s1_user_info->mme_seq_num; user_info->nas_.ue_seq_num = s1_user_info->ue_seq_num; user_info->nas_.mme_overflow= s1_user_info->mme_overflow; user_info->nas_.ue_overflow = s1_user_info->ue_overflow; memcpy(user_info->nas_.kasme, s1_user_info->kasme, KASME_LEN); } #endif SPUserInfo sp_local_user_info(user_info); ue_stmsi_map_.insert(std::make_pair(stmsi_key, sp_local_user_info)); UpdateFromStmsiTimeoutMap(s1_user_info->stmsi, tv_sec, true); }什么意思
这段代码是一个C++函数,函数名为InsertToS1mmeUserInfo,它的作用是将给定的S1UserInfo_T结构体中的信息插入到S1mmeUserInfo中。S1mmeUserInfo是一个存储用户信息的类。
函数中,首先通过AllocateS1mmeUserInfo函数分配一个新的S1mmeUserInfo对象,然后将S1UserInfo_T中的imsi、stmsi、apn和user_ip等信息分别设置到S1mmeUserInfo对象中。
接着,根据stmsi创建一个StmsiWithMmegi_T对象作为键,将S1mmeUserInfo对象通过smart pointer封装成SPUserInfo对象,再将键值对(stmsi_key, sp_local_user_info)插入到ue_stmsi_map_中。
最后调用UpdateFromStmsiTimeoutMap函数更新stmsi的超时信息。如果S1UserInfo_T中包含kasme信息,则还会将其设置到S1mmeUserInfo对象的nas_成员中。
该函数是S1mmeSession类的成员函数,可能是在处理用户接入时调用的。
阅读全文
相关推荐







