@@ -247,50 +247,39 @@ static std::string hmacsha256(uint32_t sdkappid, const std::string &identifier,
247247TLS_API int genUserSig (uint32_t sdkappid, const std::string &userid, const std::string &key,
248248 int expire, std::string &usersig, std::string &errmsg)
249249{
250- uint64_t curr_time = time (NULL );
251- std::string base64_raw_sig = hmacsha256 (sdkappid, userid, curr_time, expire, key);
252- rapidjson::Document sig_doc;
253- sig_doc.SetObject ();
254- sig_doc.AddMember (" TLS.ver" , " 2.0" , sig_doc.GetAllocator ());
255- sig_doc.AddMember (" TLS.sdkappid" , sdkappid, sig_doc.GetAllocator ());
256- sig_doc.AddMember (" TLS.identifier" , userid, sig_doc.GetAllocator ());
257- sig_doc.AddMember (" TLS.time" , curr_time, sig_doc.GetAllocator ());
258- sig_doc.AddMember (" TLS.expire" , expire, sig_doc.GetAllocator ());
259- sig_doc.AddMember (" TLS.sig" , base64_raw_sig, sig_doc.GetAllocator ());
260- return json2sig (sig_doc, usersig, errmsg);
250+ return genSig (sdkappid,userid,key," " ,expire,usersig,errmsg);
261251}
262252
263253// 生成带 userbuf 的签名
264254TLS_API int genPrivateMapKey (uint32_t sdkappid, const std::string &userid, const std::string &key, uint32_t roomid,
265255 int expire, int privilegeMap, std::string &usersig, std::string &errmsg)
266256{
267- uint64_t currTime = time (NULL );
268- std::string userbuf = gen_userbuf (userid, sdkappid, roomid, expire, privilegeMap, 0 );
269- std::string base64UserBuf;
270- base64_encode (userbuf.data (), userbuf.length (), base64UserBuf);
271- std::string base64RawSig = hmacsha256 (
272- sdkappid, userid, currTime, expire, key, base64UserBuf);
273- rapidjson::Document sig_doc;
274- sig_doc.SetObject ();
275- sig_doc.AddMember (" TLS.ver" , " 2.0" , sig_doc.GetAllocator ());
276- sig_doc.AddMember (" TLS.sdkappid" , sdkappid, sig_doc.GetAllocator ());
277- sig_doc.AddMember (" TLS.identifier" , userid, sig_doc.GetAllocator ());
278- sig_doc.AddMember (" TLS.time" , currTime, sig_doc.GetAllocator ());
279- sig_doc.AddMember (" TLS.expire" , expire, sig_doc.GetAllocator ());
280- sig_doc.AddMember (" TLS.userbuf" , base64UserBuf, sig_doc.GetAllocator ());
281- sig_doc.AddMember (" TLS.sig" , base64RawSig, sig_doc.GetAllocator ());
282- return json2sig (sig_doc, usersig, errmsg);
257+ std::string userbuf = gen_userbuf (userid, sdkappid, roomid, expire, privilegeMap, 0 ," " );
258+ return genSig (sdkappid,userid,key,userbuf,expire,usersig,errmsg);
259+ }
260+ // 生成带 userbuf 的签名,字符串房间号
261+ TLS_API int genPrivateMapKeyWithStringRoomID (uint32_t sdkappid, const std::string &userid, const std::string &key, const std::string &roomstr,
262+ int expire, int privilegeMap, std::string &usersig, std::string &errmsg)
263+ {
264+ std::string userbuf = gen_userbuf (userid, sdkappid, 0 , expire, privilegeMap, 0 ,roomstr);
265+ return genSig (sdkappid,userid,key,userbuf,expire,usersig,errmsg);
283266}
284267
285268TLS_API std::string gen_userbuf (const std::string &account, uint32_t dwSdkappid, uint32_t dwAuthID,
286- uint32_t dwExpTime, uint32_t dwPrivilegeMap, uint32_t dwAccountType)
269+ uint32_t dwExpTime, uint32_t dwPrivilegeMap, uint32_t dwAccountType, const std::string &roomStr )
287270{
288271 int length = 1 + 2 + account.length () + 20 ;
289272 int offset = 0 ;
290273 char userBuf[length];
291274 memset (userBuf, 0 , sizeof (userBuf));
292275
293- userBuf[offset++] = 0 ;
276+ if (roomStr.length () > 0 )
277+ {
278+ userBuf[offset++] = 1 ;
279+ length += 2 + roomStr.length ();
280+ }
281+ else
282+ userBuf[offset++] = 0 ;
294283
295284 userBuf[offset++] = ((account.length () & 0xFF00 ) >> 8 );
296285 userBuf[offset++] = (account.length () & 0x00FF );
@@ -330,5 +319,45 @@ TLS_API std::string gen_userbuf(const std::string &account, uint32_t dwSdkappid,
330319 userBuf[offset++] = ((dwAccountType & 0x00FF0000 ) >> 16 );
331320 userBuf[offset++] = ((dwAccountType & 0x0000FF00 ) >> 8 );
332321 userBuf[offset++] = (dwAccountType & 0x000000FF );
322+
323+ if (roomStr.length () > 0 )
324+ {
325+ userBuf[offset++] = ((roomStr.length () & 0xFF00 ) >> 8 );
326+ userBuf[offset++] = (roomStr.length () & 0x00FF );
327+
328+ for (; offset < length; ++offset)
329+ {
330+ userBuf[offset] = account[offset - (length - roomStr.length ())];
331+ }
332+ }
333333 return std::string (userBuf, length);
334+ }
335+ TLS_API int genSig (uint32_t sdkappid, const std::string &userid, const std::string &key, const std::string &userbuf,
336+ int expire, std::string &usersig, std::string &errmsg)
337+ {
338+ uint64_t currTime = time (NULL );
339+ std::string base64UserBuf = " " ;
340+ std::string base64RawSig = " " ;
341+ if (userbuf.length () >0 )
342+ {
343+ base64_encode (userbuf.data (), userbuf.length (), base64UserBuf);
344+ base64RawSig = hmacsha256 (
345+ sdkappid, userid, currTime, expire, key, base64UserBuf);
346+ }
347+ else
348+ {
349+ base64RawSig = hmacsha256 (sdkappid, userid, currTime, expire, key);
350+ }
351+
352+ rapidjson::Document sig_doc;
353+ sig_doc.SetObject ();
354+ sig_doc.AddMember (" TLS.ver" , " 2.0" , sig_doc.GetAllocator ());
355+ sig_doc.AddMember (" TLS.sdkappid" , sdkappid, sig_doc.GetAllocator ());
356+ sig_doc.AddMember (" TLS.identifier" , userid, sig_doc.GetAllocator ());
357+ sig_doc.AddMember (" TLS.time" , currTime, sig_doc.GetAllocator ());
358+ sig_doc.AddMember (" TLS.expire" , expire, sig_doc.GetAllocator ());
359+ if (base64UserBuf.length () > 0 )
360+ sig_doc.AddMember (" TLS.userbuf" , base64UserBuf, sig_doc.GetAllocator ());
361+ sig_doc.AddMember (" TLS.sig" , base64RawSig, sig_doc.GetAllocator ());
362+ return json2sig (sig_doc, usersig, errmsg);
334363}
0 commit comments