static BYTE* xf_cliprdr_process_requested_html(BYTE* data, int* size) { char* inbuf; BYTE* in; BYTE* outbuf; char num[11]; inbuf = NULL; if (*size > 2) { if ((BYTE) data[0] == 0xFE && (BYTE) data[1] == 0xFF) { be2le(data, *size); } if ((BYTE) data[0] == 0xFF && (BYTE) data[1] == 0xFE) { ConvertFromUnicode(CP_UTF8, 0, (WCHAR*) (data + 2), (*size - 2) / 2, &inbuf, 0, NULL, NULL); } } if (inbuf == NULL) { inbuf = malloc(*size + 1); ZeroMemory(inbuf, *size + 1); CopyMemory(inbuf, data, *size); } outbuf = (BYTE*) malloc(*size + 200); ZeroMemory(outbuf, *size + 200); strcpy((char*) outbuf, "Version:0.9\r\n" "StartHTML:0000000000\r\n" "EndHTML:0000000000\r\n" "StartFragment:0000000000\r\n" "EndFragment:0000000000\r\n"); in = (BYTE*) strstr((char*) inbuf, "<body"); if (in == NULL) { in = (BYTE*) strstr((char*) inbuf, "<BODY"); } /* StartHTML */ snprintf(num, sizeof(num), "%010lu", (unsigned long) strlen((char*) outbuf)); CopyMemory(outbuf + 23, num, 10); if (in == NULL) { strcat((char*) outbuf, "<HTML><BODY>"); } strcat((char*) outbuf, "<!--StartFragment-->"); /* StartFragment */ snprintf(num, sizeof(num), "%010lu", (unsigned long) strlen((char*) outbuf)); CopyMemory(outbuf + 69, num, 10); strcat((char*) outbuf, (char*) inbuf); /* EndFragment */ snprintf(num, sizeof(num), "%010lu", (unsigned long) strlen((char*) outbuf)); CopyMemory(outbuf + 93, num, 10); strcat((char*) outbuf, "<!--EndFragment-->"); if (in == NULL) { strcat((char*) outbuf, "</BODY></HTML>"); } /* EndHTML */ snprintf(num, sizeof(num), "%010lu", (unsigned long) strlen((char*) outbuf)); CopyMemory(outbuf + 43, num, 10); *size = strlen((char*) outbuf) + 1; free(inbuf); return outbuf; }
static uint8* xf_cliprdr_process_requested_html(uint8* data, int* size) { uint8* inbuf; uint8* in; uint8* outbuf; char num[11]; UNICONV* uniconv; inbuf = NULL; if (*size > 2) { if ((uint8) data[0] == 0xFE && (uint8) data[1] == 0xFF) { be2le(data, *size); } if ((uint8) data[0] == 0xFF && (uint8) data[1] == 0xFE) { uniconv = freerdp_uniconv_new(); inbuf = (uint8*) freerdp_uniconv_in(uniconv, data + 2, *size - 2); freerdp_uniconv_free(uniconv); } } if (inbuf == NULL) { inbuf = xzalloc(*size + 1); memcpy(inbuf, data, *size); } outbuf = (uint8*) xzalloc(*size + 200); strcpy((char*) outbuf, "Version:0.9\r\n" "StartHTML:0000000000\r\n" "EndHTML:0000000000\r\n" "StartFragment:0000000000\r\n" "EndFragment:0000000000\r\n"); in = (uint8*) strstr((char*) inbuf, "<body"); if (in == NULL) { in = (uint8*) strstr((char*) inbuf, "<BODY"); } /* StartHTML */ snprintf(num, sizeof(num), "%010lu", (unsigned long) strlen((char*) outbuf)); memcpy(outbuf + 23, num, 10); if (in == NULL) { strcat((char*) outbuf, "<HTML><BODY>"); } strcat((char*) outbuf, "<!--StartFragment-->"); /* StartFragment */ snprintf(num, sizeof(num), "%010lu", (unsigned long) strlen((char*) outbuf)); memcpy(outbuf + 69, num, 10); strcat((char*) outbuf, (char*) inbuf); /* EndFragment */ snprintf(num, sizeof(num), "%010lu", (unsigned long) strlen((char*) outbuf)); memcpy(outbuf + 93, num, 10); strcat((char*) outbuf, "<!--EndFragment-->"); if (in == NULL) { strcat((char*) outbuf, "</BODY></HTML>"); } /* EndHTML */ snprintf(num, sizeof(num), "%010lu", (unsigned long) strlen((char*) outbuf)); memcpy(outbuf + 43, num, 10); *size = strlen((char*) outbuf) + 1; xfree(inbuf); return outbuf; }