mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-22 23:31:26 +00:00
Fix some bugs and add close_later() methods in RSocket
Uglify d3.js (the smaller the better) Fix premature socket close on http reply with a hack
This commit is contained in:
parent
e22ac507ea
commit
c98cc9d1ab
@ -477,7 +477,7 @@ else
|
|||||||
}
|
}
|
||||||
if (showhdr && fmt==1)
|
if (showhdr && fmt==1)
|
||||||
r_cons_printf ("}\n");
|
r_cons_printf ("}\n");
|
||||||
if (fmt==2) r_cons_printf ("]");
|
if (fmt==2) r_cons_printf ("]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fcn_list_bbs(RAnalFunction *fcn) {
|
static void fcn_list_bbs(RAnalFunction *fcn) {
|
||||||
|
@ -140,7 +140,7 @@ R_API int r_core_rtr_http(RCore *core, int launch) {
|
|||||||
} else {
|
} else {
|
||||||
r_socket_http_response (rs, 404, "Invalid protocol", 0, NULL);
|
r_socket_http_response (rs, 404, "Invalid protocol", 0, NULL);
|
||||||
}
|
}
|
||||||
r_socket_http_close (rs);
|
r_socket_http_close_later (rs);
|
||||||
}
|
}
|
||||||
r_socket_free (s);
|
r_socket_free (s);
|
||||||
r_cons_break_end ();
|
r_cons_break_end ();
|
||||||
|
@ -37,6 +37,7 @@ R_API int r_socket_connect (RSocket *s, const char *host, const char *port, int
|
|||||||
R_API int r_socket_unix_listen (RSocket *s, const char *file);
|
R_API int r_socket_unix_listen (RSocket *s, const char *file);
|
||||||
#endif
|
#endif
|
||||||
R_API int r_socket_close (RSocket *s);
|
R_API int r_socket_close (RSocket *s);
|
||||||
|
R_API int r_socket_close_later (RSocket *s);
|
||||||
R_API int r_socket_free (RSocket *s);
|
R_API int r_socket_free (RSocket *s);
|
||||||
R_API int r_socket_listen (RSocket *s, const char *port, const char *certfile);
|
R_API int r_socket_listen (RSocket *s, const char *port, const char *certfile);
|
||||||
R_API RSocket *r_socket_accept (RSocket *s);
|
R_API RSocket *r_socket_accept (RSocket *s);
|
||||||
@ -83,5 +84,6 @@ typedef struct r_socket_http_request {
|
|||||||
R_API RSocketHTTPRequest *r_socket_http_accept (RSocket *s, int timeout);
|
R_API RSocketHTTPRequest *r_socket_http_accept (RSocket *s, int timeout);
|
||||||
R_API void r_socket_http_response (RSocketHTTPRequest *rs, int code, const char *out, int x, const char *headers);
|
R_API void r_socket_http_response (RSocketHTTPRequest *rs, int code, const char *out, int x, const char *headers);
|
||||||
R_API void r_socket_http_close (RSocketHTTPRequest *rs);
|
R_API void r_socket_http_close (RSocketHTTPRequest *rs);
|
||||||
|
R_API void r_socket_http_close_later (RSocketHTTPRequest *rs);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -69,10 +69,22 @@ R_API void r_socket_http_response (RSocketHTTPRequest *rs, int code, const char
|
|||||||
if (len<1) len = out? strlen (out): 0;
|
if (len<1) len = out? strlen (out): 0;
|
||||||
if (!headers) headers = "";
|
if (!headers) headers = "";
|
||||||
r_socket_printf (rs->s, "HTTP/1.0 %d %s\n%s"
|
r_socket_printf (rs->s, "HTTP/1.0 %d %s\n%s"
|
||||||
"Content-Length: %d\n\n", code, strcode, headers, len);
|
"Connection: close\nContent-Length: %d\n\n", code, strcode, headers, len);
|
||||||
if (out && len>0) r_socket_write (rs->s, (void*)out, len);
|
if (out && len>0) r_socket_write (rs->s, (void*)out, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
R_API void r_socket_http_close_later (RSocketHTTPRequest *rs) {
|
||||||
|
#if __UNIX__
|
||||||
|
if (!fork ()) {
|
||||||
|
sleep (3);
|
||||||
|
r_socket_http_close (rs);
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
r_socket_http_close (rs);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* close client socket and free struct */
|
/* close client socket and free struct */
|
||||||
R_API void r_socket_http_close (RSocketHTTPRequest *rs) {
|
R_API void r_socket_http_close (RSocketHTTPRequest *rs) {
|
||||||
r_socket_free (rs->s);
|
r_socket_free (rs->s);
|
||||||
@ -92,7 +104,7 @@ int main() {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
for (;;) {
|
for (;;) {
|
||||||
RSocketHTTPRequest *rs = r_socket_http_accept (s);
|
RSocketHTTPRequest *rs = r_socket_http_accept (s, 0);
|
||||||
if (!rs) continue;
|
if (!rs) continue;
|
||||||
if (!strcmp (rs->method, "GET")) {
|
if (!strcmp (rs->method, "GET")) {
|
||||||
r_socket_http_response (rs, 200,
|
r_socket_http_response (rs, 200,
|
||||||
|
@ -216,17 +216,31 @@ R_API int r_socket_close (RSocket *s) {
|
|||||||
WSACleanup ();
|
WSACleanup ();
|
||||||
ret = closesocket (s->fd);
|
ret = closesocket (s->fd);
|
||||||
#else
|
#else
|
||||||
shutdown (s->fd, SHUT_RDWR);
|
//shutdown (s->fd, SHUT_RDWR);
|
||||||
ret = close (s->fd);
|
ret = close (s->fd);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#if HAVE_LIB_SSL
|
#if HAVE_LIB_SSL
|
||||||
if (s->is_ssl && s->sfd)
|
if (s->is_ssl && s->sfd) {
|
||||||
SSL_shutdown (s->sfd);
|
SSL_free (s->sfd);
|
||||||
|
s->sfd = NULL;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
R_API int r_socket_close_later (RSocket *s) {
|
||||||
|
#if __UNIX__
|
||||||
|
if (!fork ()) {
|
||||||
|
sleep (3);
|
||||||
|
r_socket_close (s);
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
r_socket_close (s);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
R_API int r_socket_free (RSocket *s) {
|
R_API int r_socket_free (RSocket *s) {
|
||||||
int res = r_socket_close (s);
|
int res = r_socket_close (s);
|
||||||
#if HAVE_LIB_SSL
|
#if HAVE_LIB_SSL
|
||||||
@ -373,7 +387,7 @@ R_API int r_socket_ready(RSocket *s, int secs, int usecs) {
|
|||||||
FD_SET (s->fd, &rfds);
|
FD_SET (s->fd, &rfds);
|
||||||
tv.tv_sec = secs;
|
tv.tv_sec = secs;
|
||||||
tv.tv_usec = usecs;
|
tv.tv_usec = usecs;
|
||||||
if (select (1, &rfds, NULL, NULL, &tv) == -1)
|
if (select (s->fd+1, &rfds, NULL, NULL, &tv) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
return FD_ISSET (0, &rfds);
|
return FD_ISSET (0, &rfds);
|
||||||
#else
|
#else
|
||||||
@ -408,17 +422,19 @@ R_API char *r_socket_to_string(RSocket *s) {
|
|||||||
R_API int r_socket_write(RSocket *s, void *buf, int len) {
|
R_API int r_socket_write(RSocket *s, void *buf, int len) {
|
||||||
int ret, delta = 0;
|
int ret, delta = 0;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
int b = 65536; // Use MTU 1500?
|
||||||
|
if (b>len) b = len;
|
||||||
#if HAVE_LIB_SSL
|
#if HAVE_LIB_SSL
|
||||||
if (s->is_ssl)
|
if (s->is_ssl)
|
||||||
if (s->bio)
|
if (s->bio)
|
||||||
ret = BIO_write (s->bio, buf+delta, len);
|
ret = BIO_write (s->bio, buf+delta, b);
|
||||||
else
|
else
|
||||||
ret = SSL_write (s->sfd, buf+delta, len);
|
ret = SSL_write (s->sfd, buf+delta, b);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
ret = send (s->fd, buf+delta, len, 0);
|
ret = send (s->fd, buf+delta, len, MSG_NOSIGNAL);
|
||||||
if (ret == 0)
|
//if (ret == 0) return -1;
|
||||||
return -1;
|
if (!ret) continue;
|
||||||
if (ret == len)
|
if (ret == len)
|
||||||
return len;
|
return len;
|
||||||
if (ret<0)
|
if (ret<0)
|
||||||
|
4646
shlr/www/d3/d3.js
vendored
4646
shlr/www/d3/d3.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user