* Use the MSG_MORE flag for send() where appropriate.

This commit is contained in:
Justin Maggard 2010-06-09 08:05:27 +00:00
parent c779eab4de
commit d1623ca25d

View File

@ -1037,11 +1037,11 @@ SendResp_upnphttp(struct upnphttp * h)
} }
int int
send_data(struct upnphttp * h, char * header, size_t size) send_data(struct upnphttp * h, char * header, size_t size, int flags)
{ {
int n; int n;
n = send(h->socket, header, size, 0); n = send(h->socket, header, size, flags);
if(n<0) if(n<0)
{ {
DPRINTF(E_ERROR, L_HTTP, "send(res_buf): %s\n", strerror(errno)); DPRINTF(E_ERROR, L_HTTP, "send(res_buf): %s\n", strerror(errno));
@ -1087,7 +1087,7 @@ SendResp_icon(struct upnphttp * h, char * icon)
{ {
char * header; char * header;
char * data; char * data;
int size; int size, ret;
char mime[12]; char mime[12];
char date[30]; char date[30];
time_t curtime = time(NULL); time_t curtime = time(NULL);
@ -1129,17 +1129,17 @@ SendResp_icon(struct upnphttp * h, char * icon)
strftime(date, 30,"%a, %d %b %Y %H:%M:%S GMT" , gmtime(&curtime)); strftime(date, 30,"%a, %d %b %Y %H:%M:%S GMT" , gmtime(&curtime));
asprintf(&header, "HTTP/1.1 200 OK\r\n" ret = asprintf(&header, "HTTP/1.1 200 OK\r\n"
"Content-Type: %s\r\n" "Content-Type: %s\r\n"
"Content-Length: %d\r\n" "Content-Length: %d\r\n"
"Connection: close\r\n" "Connection: close\r\n"
"Date: %s\r\n" "Date: %s\r\n"
"Server: " MINIDLNA_SERVER_STRING "\r\n\r\n", "Server: " MINIDLNA_SERVER_STRING "\r\n\r\n",
mime, size, date); mime, size, date);
if( (send_data(h, header, strlen(header)) == 0) && (h->req_command != EHead) ) if( (send_data(h, header, ret, MSG_MORE) == 0) && (h->req_command != EHead) )
{ {
send_data(h, data, size); send_data(h, data, size, 0);
} }
free(header); free(header);
} }
@ -1214,7 +1214,7 @@ SendResp_albumArt(struct upnphttp * h, char * object)
} }
if( (send_data(h, header, strlen(header)) == 0) && (h->req_command != EHead) && (sendfh > 0) ) if( (send_data(h, header, strlen(header), MSG_MORE) == 0) && (h->req_command != EHead) && (sendfh > 0) )
{ {
send_file(h, sendfh, offset, size); send_file(h, sendfh, offset, size);
} }
@ -1235,7 +1235,7 @@ SendResp_caption(struct upnphttp * h, char * object)
char date[30]; char date[30];
time_t curtime = time(NULL); time_t curtime = time(NULL);
off_t offset = 0, size; off_t offset = 0, size;
int sendfh; int sendfh, ret;
memset(header, 0, 1500); memset(header, 0, 1500);
@ -1263,16 +1263,16 @@ SendResp_caption(struct upnphttp * h, char * object)
size = lseek(sendfh, 0, SEEK_END); size = lseek(sendfh, 0, SEEK_END);
lseek(sendfh, 0, SEEK_SET); lseek(sendfh, 0, SEEK_SET);
sprintf(header, "HTTP/1.1 200 OK\r\n" ret = snprintf(header, sizeof(header), "HTTP/1.1 200 OK\r\n"
"Content-Type: smi/caption\r\n" "Content-Type: smi/caption\r\n"
"Content-Length: %jd\r\n" "Content-Length: %jd\r\n"
"Connection: close\r\n" "Connection: close\r\n"
"Date: %s\r\n" "Date: %s\r\n"
"EXT:\r\n" "EXT:\r\n"
"Server: " MINIDLNA_SERVER_STRING "\r\n\r\n", "Server: " MINIDLNA_SERVER_STRING "\r\n\r\n",
size, date); size, date);
if( (send_data(h, header, strlen(header)) == 0) && (h->req_command != EHead) && (sendfh > 0) ) if( (send_data(h, header, ret, MSG_MORE) == 0) && (h->req_command != EHead) && (sendfh > 0) )
{ {
send_file(h, sendfh, offset, size); send_file(h, sendfh, offset, size);
} }
@ -1352,9 +1352,9 @@ SendResp_thumbnail(struct upnphttp * h, char * object)
strcat(header, "transferMode.dlna.org: Interactive\r\n\r\n"); strcat(header, "transferMode.dlna.org: Interactive\r\n\r\n");
} }
if( (send_data(h, header, strlen(header)) == 0) && (h->req_command != EHead) ) if( (send_data(h, header, strlen(header), MSG_MORE) == 0) && (h->req_command != EHead) )
{ {
send_data(h, (char *)ed->data, ed->size); send_data(h, (char *)ed->data, ed->size, 0);
} }
exif_data_unref(ed); exif_data_unref(ed);
} }
@ -1549,7 +1549,7 @@ SendResp_resizedimg(struct upnphttp * h, char * object)
strcat(header, str_buf); strcat(header, str_buf);
} }
if( (send_data(h, header, strlen(header)) == 0) && (h->req_command != EHead) ) if( (send_data(h, header, strlen(header), 0) == 0) && (h->req_command != EHead) )
{ {
if( chunked ) if( chunked )
{ {
@ -1564,13 +1564,13 @@ SendResp_resizedimg(struct upnphttp * h, char * object)
data = image_save_to_jpeg_buf(imdst, &size); data = image_save_to_jpeg_buf(imdst, &size);
ret = sprintf(str_buf, "%x\r\n", size); ret = sprintf(str_buf, "%x\r\n", size);
send_data(h, str_buf, ret); send_data(h, str_buf, ret, MSG_MORE);
send_data(h, (char *)data, size); send_data(h, (char *)data, size, MSG_MORE);
send_data(h, "\r\n0\r\n\r\n", 7); send_data(h, "\r\n0\r\n\r\n", 7, 0);
} }
else else
{ {
send_data(h, (char *)data, size); send_data(h, (char *)data, size, 0);
} }
} }
DPRINTF(E_INFO, L_HTTP, "Done serving %s\n", file_path); DPRINTF(E_INFO, L_HTTP, "Done serving %s\n", file_path);
@ -1788,7 +1788,7 @@ SendResp_dlnafile(struct upnphttp * h, char * object)
date, last_file.dlna); date, last_file.dlna);
strcat(header, hdr_buf); strcat(header, hdr_buf);
if( (send_data(h, header, strlen(header)) == 0) && (h->req_command != EHead) && (sendfh > 0) ) if( (send_data(h, header, strlen(header), MSG_MORE) == 0) && (h->req_command != EHead) && (sendfh > 0) )
{ {
send_file(h, sendfh, offset, h->req_RangeEnd); send_file(h, sendfh, offset, h->req_RangeEnd);
} }