+static int linphone_upnp_strncmpi(const char *str1, const char *str2, int len) {
+ int i = 0;
+ char char1, char2;
+ while(i < len) {
+ char1 = toupper(*str1);
+ char2 = toupper(*str2);
+ if(char1 == '\0' || char1 != char2) {
+ return char1 - char2;
+ }
+ str1++;
+ str2++;
+ i++;
+ }
+ return 0;
+}
+
+static int linphone_upnp_str_min(const char *str1, const char *str2) {
+ int len1 = strlen(str1);
+ int len2 = strlen(str2);
+ if(len1 > len2) {
+ return len2;
+ }
+ return len1;
+}
+
+char * linphone_upnp_format_device_id(const char *device_id) {
+ char *ret = NULL;
+ char *tmp;
+ char tchar;
+ bool_t copy;
+ if(device_id == NULL) {
+ return ret;
+ }
+ ret = ms_new(char, UPNP_UUID_LEN + 1);
+ tmp = ret;
+ if(linphone_upnp_strncmpi(device_id, "uuid:", linphone_upnp_str_min(device_id, "uuid:")) == 0) {
+ device_id += strlen("uuid:");
+ }
+ while(*device_id != '\0' && tmp - ret < UPNP_UUID_LEN) {
+ copy = FALSE;
+ tchar = *device_id;
+ if(tchar >= '0' && tchar <= '9')
+ copy = TRUE;
+ if(!copy && tchar >= 'A' && tchar <= 'Z')
+ copy = TRUE;
+ if(!copy && tchar >= 'a' && tchar <= 'z')
+ copy = TRUE;
+ if(copy) {
+ *tmp = *device_id;
+ tmp++;
+ }
+ device_id++;
+ }
+ *tmp = '\0';
+ return ret;
+}