diff options
Diffstat (limited to 'drm/drmserver')
| -rw-r--r-- | drm/drmserver/DrmManager.cpp | 54 | ||||
| -rw-r--r-- | drm/drmserver/DrmManagerService.cpp | 4 | 
2 files changed, 34 insertions, 24 deletions
diff --git a/drm/drmserver/DrmManager.cpp b/drm/drmserver/DrmManager.cpp index 1809619..3e4fe8c 100644 --- a/drm/drmserver/DrmManager.cpp +++ b/drm/drmserver/DrmManager.cpp @@ -49,32 +49,42 @@ DrmManager::~DrmManager() {  } -int DrmManager::addUniqueId(int uniqueId) { +int DrmManager::addUniqueId(bool isNative) {      Mutex::Autolock _l(mLock); -    if (0 == uniqueId) { -        int temp = 0; -        bool foundUniqueId = false; -        srand(time(NULL)); - -        while (!foundUniqueId) { -            const int size = mUniqueIdVector.size(); -            temp = rand() % 100; - -            int index = 0; -            for (; index < size; ++index) { -                if (mUniqueIdVector.itemAt(index) == temp) { -                    foundUniqueId = false; -                    break; -                } -            } -            if (index == size) { -                foundUniqueId = true; + +    int temp = 0; +    bool foundUniqueId = false; +    const int size = mUniqueIdVector.size(); +    const int uniqueIdRange = 0xfff; +    int maxLoopTimes = (uniqueIdRange - 1) / 2; +    srand(time(NULL)); + +    while (!foundUniqueId) { +        temp = rand() & uniqueIdRange; + +        if (isNative) { +            // set a flag to differentiate DrmManagerClient +            // created from native side and java side +            temp |= 0x1000; +        } + +        int index = 0; +        for (; index < size; ++index) { +            if (mUniqueIdVector.itemAt(index) == temp) { +                foundUniqueId = false; +                break;              }          } -        uniqueId = temp; +        if (index == size) { +            foundUniqueId = true; +        } + +        maxLoopTimes --; +        LOG_FATAL_IF(maxLoopTimes <= 0, "cannot find an unique ID for this session");      } -    mUniqueIdVector.push(uniqueId); -    return uniqueId; + +    mUniqueIdVector.push(temp); +    return temp;  }  void DrmManager::removeUniqueId(int uniqueId) { diff --git a/drm/drmserver/DrmManagerService.cpp b/drm/drmserver/DrmManagerService.cpp index 583669e..7ebcac3 100644 --- a/drm/drmserver/DrmManagerService.cpp +++ b/drm/drmserver/DrmManagerService.cpp @@ -78,8 +78,8 @@ DrmManagerService::~DrmManagerService() {      delete mDrmManager; mDrmManager = NULL;  } -int DrmManagerService::addUniqueId(int uniqueId) { -    return mDrmManager->addUniqueId(uniqueId); +int DrmManagerService::addUniqueId(bool isNative) { +    return mDrmManager->addUniqueId(isNative);  }  void DrmManagerService::removeUniqueId(int uniqueId) {  | 
