Это моя первая прокси-реализация, которая отправляет запрос от клиента к серверу и отправляет ответ от сервера к клиенту.
У меня на самом деле два вопроса.
Q1:
Как показано во второй строке, запрос отправляется на сервер.
Но я ожидал получить ответ от адреса сервера «143.248.36.166»
Однако ответа от адреса сервера на адрес источника нет.
Но, как показано в 3-й строке и ниже, ответ от прокси отправляется клиенту.
Тогда где прокси получает ответ?
(я очистил историю, поэтому я не вижу кеша)
мой код:
while(1){
char response[1024];
bzero(response, 1024);
int n = read(connfd_to_server, res_buf, 1024);
if (n <=0){
printf("will break");
break;
}
else{ //if first packet, modify header
if(packet == 0){
res_line = strtok(res_buf, "\r\n");
for(int i = 0; i<11; i++){ //copy first 11 lines as it is
strcat(response, res_line);
strcat(response, "\r\n");
res_line = strtok(NULL, "\r\n");
}
strcat(response, "Via: 1.1 ubuntu (ee323_proxy/1.0.0)");
strcat(response, "\r\n"); //add this new line
memcpy(response+strlen(response),res_line,n-strlen(response)); //memcpy rest header, and some message body
if (send(connfd_to_client, response, n, 0)<0){
perror("send failed");
}
}
else{ //if not first packet, there is no header, just send
if (send(connfd_to_client, res_buf, n, 0)<0){
perror("send failed");
}
}
}
packet++;
}
Q2:
Я хочу отправить измененный контент клиенту.
Но есть ошибка.
Как показано, добавлена новая строка.
Однако строка после новой строки не заканчивается на «\ r \ n» как другие строки.
Я не знаю, почему окончание изменилось.
Также есть сообщение об ошибке: декомпрессия не удалась
Я хочу получить свой последний буфер res_line (заголовок остатка + тело сообщения), однако, похоже, что это неправильно.
Как я могу исправить эти две проблемы?
Большое спасибо заранее
Я застрял на некоторое время ...