mirror of
https://github.com/sheumann/NetDisk.git
synced 2024-12-13 13:29:18 +00:00
92649e33ee
It now accepts a flag "-c" to disable caching, and can also print meaningful error messages.
100 lines
2.5 KiB
C
100 lines
2.5 KiB
C
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <tcpip.h>
|
|
#include <locator.h>
|
|
#include <misctool.h>
|
|
#include <memory.h>
|
|
#include <orca.h>
|
|
#include "http.h"
|
|
#include "session.h"
|
|
#include "seturl.h"
|
|
#include "hostname.h"
|
|
#include "tcpconnection.h"
|
|
#include "readtcp.h"
|
|
|
|
char buf[512];
|
|
|
|
int main(int argc, char **argv) {
|
|
TLStartUp();
|
|
|
|
LoadOneTool(54,0x200);
|
|
TCPIPStartUp();
|
|
|
|
if (TCPIPGetConnectStatus() == FALSE) {
|
|
TCPIPConnect(NULL);
|
|
if (toolerror())
|
|
goto exit;
|
|
}
|
|
|
|
Session sess = {0};
|
|
|
|
if (argc < 2)
|
|
goto exit;
|
|
|
|
char *url = argv[1];
|
|
|
|
enum NetDiskError result = SetURL(&sess, url, TRUE, FALSE);
|
|
|
|
if (result != OPERATION_SUCCESSFUL) {
|
|
printf("SetURL error %i\n", (int)result);
|
|
goto exit;
|
|
}
|
|
|
|
unsigned long startByte = 0;
|
|
if (argc > 2) {
|
|
startByte = strtoul(argv[2], NULL, 0);
|
|
}
|
|
|
|
printf("Request:\n");
|
|
printf("=========\n");
|
|
int i;
|
|
for (i = 0; sess.httpRequest[i] != '\0'; i++) {
|
|
char ch = sess.httpRequest[i];
|
|
if (ch != '\r')
|
|
putchar(ch);
|
|
}
|
|
printf("=========\n");
|
|
printf("\n");
|
|
|
|
enum NetDiskError requestResult;
|
|
requestResult = DoHTTPRequest(&sess, startByte, startByte + 511);
|
|
printf("RequestResult %i\n", requestResult);
|
|
printf("Response code %lu\n", sess.responseCode);
|
|
|
|
if (requestResult == OPERATION_SUCCESSFUL) {
|
|
printf("rangeStart = %lu\n", sess.rangeStart);
|
|
printf("rangeEnd = %lu\n", sess.rangeEnd);
|
|
printf("totalLength = %lu\n", sess.totalLength);
|
|
printf("contentLength = %lu\n", sess.contentLength);
|
|
}
|
|
|
|
InitReadTCP(&sess, sess.rangeEnd - sess.rangeStart + 1, buf);
|
|
while (TryReadTCP(&sess) == rsWaiting)
|
|
/* keep reading */ ;
|
|
|
|
LongWord startTime = GetTick();
|
|
while (GetTick() - startTime < 70)
|
|
/* wait */ ;
|
|
|
|
printf("Request 2:\n");
|
|
requestResult = DoHTTPRequest(&sess, startByte + 512, startByte + 1023);
|
|
printf("RequestResult %i\n", requestResult);
|
|
printf("Response code %lu\n", sess.responseCode);
|
|
|
|
if (requestResult == OPERATION_SUCCESSFUL) {
|
|
printf("rangeStart = %lu\n", sess.rangeStart);
|
|
printf("rangeEnd = %lu\n", sess.rangeEnd);
|
|
printf("totalLength = %lu\n", sess.totalLength);
|
|
printf("contentLength = %lu\n", sess.contentLength);
|
|
}
|
|
|
|
|
|
EndTCPConnection(&sess);
|
|
|
|
exit:
|
|
TCPIPShutDown();
|
|
UnloadOneTool(54);
|
|
TLShutDown();
|
|
}
|