mirror of
https://github.com/sheumann/NetDisk.git
synced 2025-02-17 12:30:32 +00:00
54 lines
1.5 KiB
C
54 lines
1.5 KiB
C
#pragma lint -1
|
|
#pragma noroot
|
|
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <types.h>
|
|
#include "session.h"
|
|
#include "http.h"
|
|
|
|
Boolean BuildHTTPRequest(Session *sess, char *resourceStr) {
|
|
int sizeNeeded = 0;
|
|
int rangeOffset;
|
|
int round = 0;
|
|
|
|
do {
|
|
sizeNeeded = snprintf(sess->httpRequest, sizeNeeded,
|
|
"GET /%s HTTP/1.1\r\n"
|
|
"Host: %s\r\n"
|
|
"User-Agent: GSRemoteDisk/0.1\r\n"
|
|
"Accept-Encoding: identity\r\n"
|
|
//"Accept: */*\r\n" /* default, but some clients send explicitly */
|
|
//"Connection: Keep-Alive\r\n" /* same */
|
|
"Range: bytes=%n1234567890-1234567890\r\n"
|
|
"\r\n",
|
|
resourceStr,
|
|
sess->hostName+1,
|
|
&rangeOffset);
|
|
|
|
if (sizeNeeded <= 0) {
|
|
free(sess->httpRequest);
|
|
sess->httpRequest = NULL;
|
|
sess->httpRequestRange = NULL;
|
|
return FALSE;
|
|
}
|
|
|
|
if (round == 0) {
|
|
sizeNeeded++; /* account for terminating NUL */
|
|
free(sess->httpRequest);
|
|
sess->httpRequest = malloc(sizeNeeded);
|
|
if (sess->httpRequest == NULL) {
|
|
sess->httpRequestRange = NULL;
|
|
return FALSE;
|
|
}
|
|
}
|
|
} while (round++ == 0);
|
|
|
|
sess->httpRequestRange = sess->httpRequest + rangeOffset;
|
|
return TRUE;
|
|
}
|
|
|
|
void UpdateRequestRange(Session *sess, unsigned long start, unsigned long end) {
|
|
snprintf(sess->httpRequestRange, 10+1+10+5, "%lu-%lu\r\n\r\n", start, end);
|
|
}
|