Date: Sun, 17 Jun 2007 11:34:05 GMT From: Andrew Turner <andrew@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 121847 for review Message-ID: <200706171134.l5HBY5I5033193@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=121847 Change 121847 by andrew@andrew_hermies on 2007/06/17 11:33:57 Use calloc rather than malloc/memset When the back end receives the close of the facund-client element set the connection to be closed. This fixes a bug where the connection would never be closed. If the backend sends a ping call respond with a <pong/>. This is just for testing and will be removed when calls are implemented properly. Use the correct values for the call name and ID Ignore the <facund-client> for now. It will be used later to find the supported version of the protocol. Affected files ... .. //depot/projects/soc2007/andrew-update/lib/facund_connection.c#3 edit .. //depot/projects/soc2007/andrew-update/lib/facund_private.h#4 edit .. //depot/projects/soc2007/andrew-update/lib/facund_server.c#5 edit Differences ... ==== //depot/projects/soc2007/andrew-update/lib/facund_connection.c#3 (text+ko) ==== @@ -49,13 +49,11 @@ { struct facund_conn *conn; - conn = malloc(sizeof(struct facund_conn)); + conn = calloc(1, sizeof(struct facund_conn)); if (conn == NULL) { return NULL; } - memset(conn, 0, sizeof(struct facund_conn)); - conn->do_unlink = 0; conn->local.sun_family = AF_LOCAL; ==== //depot/projects/soc2007/andrew-update/lib/facund_private.h#4 (text+ko) ==== @@ -59,6 +59,8 @@ socklen_t sock_len; /* sizeof(remote) */ int sock; /* The socket fd */ int fd; /* The fd to the remote device */ + int close; /* True when we should + * close the connection */ XML_Parser parser; char current_call[32]; ==== //depot/projects/soc2007/andrew-update/lib/facund_server.c#5 (text+ko) ==== @@ -80,6 +80,10 @@ char *buf; ssize_t len; + if (conn->close == 1) { + return 1; + } + buf = XML_GetBuffer(conn->parser, BUF_SIZE); if (buf == NULL) return -1; @@ -110,8 +114,15 @@ } static void -facund_server_call(struct facund_conn *conn __unused, const char *name, const char *id, struct facund_object *arg) +facund_server_call(struct facund_conn *conn, const char *name, const char *id, + struct facund_object *arg) { + /* This is not really a valid command. It is just used for testing */ + if (strcmp(name, "ping") == 0) { + const char *msg = "<pong/>"; + facund_send(conn, msg, strlen(msg)); + return; + } printf("Call: %s\nID: %s\nArg:\n", name, id); facund_object_print(arg); putchar('\n'); @@ -141,13 +152,13 @@ /* TODO: Return an error */ return; } - call_name = attrs[i]; + call_name = attrs[i + 1]; } else if (strcmp(attrs[i], "id") == 0) { if (id != NULL) { /* TODO: Return an error */ return; } - id = attrs[i]; + id = attrs[i + 1]; } else { /* TODO: Return an error */ return; @@ -179,6 +190,8 @@ facund_object_array_append(conn->call_arg, obj); } conn->call_arg = obj; + } else if (strcmp(name, "facund-client") == 0) { + /* Pass */ } else { snprintf(str, 1024, "<unknown element=\"%s\"/>", name); facund_send(conn, str, strlen(str)); @@ -212,6 +225,7 @@ } else if (strcmp(name, "facund-client") == 0) { snprintf(str, 1024, "</facund-server>"); facund_send(conn, str, strlen(str)); + conn->close = 1; } }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200706171134.l5HBY5I5033193>