[Spice-devel] [PATCH v6 2/5] udscs: don't pass message type strings into the server.

Christophe Fergeau cfergeau at redhat.com
Tue Jan 24 08:48:43 UTC 2017


On Mon, Jan 23, 2017 at 02:53:52PM +0100, Michal Suchanek wrote:
> The message types are defined by the protocol so the same array is
> always passed into the server anyway. So define the array size to be the
> number of message types and just use the array and limit directly in
> udscs. If somebody adds a message type in the future the array will
> contain some friendly NULLs at the end.

From a quick look, udcsc seems to be protocol-agnostic, in particular
before this change, I don't think it makes any reference to vdagent.
Unless we have a strong reason for changing this, I'd keep things as
they currently are, and drop this patch.

Christophe

> 
> Signed-off-by: Michal Suchanek <msuchanek at suse.de>
> ---
>  src/udscs.c                  | 23 +++++++----------------
>  src/udscs.h                  |  4 ++--
>  src/vdagent/vdagent.c        |  1 -
>  src/vdagentd-proto-strings.h |  3 ++-
>  src/vdagentd/vdagentd.c      |  1 -
>  5 files changed, 11 insertions(+), 21 deletions(-)
> 
> diff --git a/src/udscs.c b/src/udscs.c
> index fdd75a4..631f889 100644
> --- a/src/udscs.c
> +++ b/src/udscs.c
> @@ -32,6 +32,7 @@
>  #include <sys/socket.h>
>  #include <sys/un.h>
>  #include "udscs.h"
> +#include "vdagentd-proto-strings.h"
>  
>  struct udscs_buf {
>      uint8_t *buf;
> @@ -43,8 +44,6 @@ struct udscs_buf {
>  
>  struct udscs_connection {
>      int fd;
> -    const char * const *type_to_string;
> -    int no_types;
>      int debug;
>      void *user_data;
>  #ifndef UDSCS_NO_SERVER
> @@ -71,7 +70,7 @@ struct udscs_connection {
>  struct udscs_connection *udscs_connect(const char *socketname,
>      udscs_read_callback read_callback,
>      udscs_disconnect_callback disconnect_callback,
> -    const char * const type_to_string[], int no_types, int debug)
> +    int debug)
>  {
>      int c;
>      struct sockaddr_un address;
> @@ -81,8 +80,6 @@ struct udscs_connection *udscs_connect(const char *socketname,
>      if (!conn)
>          return NULL;
>  
> -    conn->type_to_string = type_to_string;
> -    conn->no_types = no_types;
>      conn->debug = debug;
>  
>      conn->fd = socket(PF_UNIX, SOCK_STREAM, 0);
> @@ -189,9 +186,9 @@ int udscs_write(struct udscs_connection *conn, uint32_t type, uint32_t arg1,
>      memcpy(new_wbuf->buf + sizeof(header), data, size);
>  
>      if (conn->debug) {
> -        if (type < conn->no_types)
> +        if (type < VDAGENTD_NO_MESSAGES)
>              syslog(LOG_DEBUG, "%p sent %s, arg1: %u, arg2: %u, size %u",
> -                   conn, conn->type_to_string[type], arg1, arg2, size);
> +                   conn, vdagentd_messages[type], arg1, arg2, size);
>          else
>              syslog(LOG_DEBUG,
>                     "%p sent invalid message %u, arg1: %u, arg2: %u, size %u",
> @@ -219,10 +216,10 @@ static void udscs_read_complete(struct udscs_connection **connp)
>      struct udscs_connection *conn = *connp;
>  
>      if (conn->debug) {
> -        if (conn->header.type < conn->no_types)
> +        if (conn->header.type < VDAGENTD_NO_MESSAGES)
>              syslog(LOG_DEBUG,
>                     "%p received %s, arg1: %u, arg2: %u, size %u",
> -                   conn, conn->type_to_string[conn->header.type],
> +                   conn, vdagentd_messages[conn->header.type],
>                     conn->header.arg1, conn->header.arg2, conn->header.size);
>          else
>              syslog(LOG_DEBUG,
> @@ -360,8 +357,6 @@ int udscs_client_fill_fds(struct udscs_connection *conn, fd_set *readfds,
>  
>  struct udscs_server {
>      int fd;
> -    const char * const *type_to_string;
> -    int no_types;
>      int debug;
>      struct udscs_connection connections_head;
>      udscs_connect_callback connect_callback;
> @@ -373,7 +368,7 @@ struct udscs_server *udscs_create_server(const char *socketname,
>      udscs_connect_callback connect_callback,
>      udscs_read_callback read_callback,
>      udscs_disconnect_callback disconnect_callback,
> -    const char * const type_to_string[], int no_types, int debug)
> +    int debug)
>  {
>      int c;
>      struct sockaddr_un address;
> @@ -383,8 +378,6 @@ struct udscs_server *udscs_create_server(const char *socketname,
>      if (!server)
>          return NULL;
>  
> -    server->type_to_string = type_to_string;
> -    server->no_types = no_types;
>      server->debug = debug;
>  
>      server->fd = socket(PF_UNIX, SOCK_STREAM, 0);
> @@ -461,8 +454,6 @@ static void udscs_server_accept(struct udscs_server *server) {
>      }
>  
>      new_conn->fd = fd;
> -    new_conn->type_to_string = server->type_to_string;
> -    new_conn->no_types = server->no_types;
>      new_conn->debug = server->debug;
>      new_conn->read_callback = server->read_callback;
>      new_conn->disconnect_callback = server->disconnect_callback;
> diff --git a/src/udscs.h b/src/udscs.h
> index 6160568..61818cf 100644
> --- a/src/udscs.h
> +++ b/src/udscs.h
> @@ -69,7 +69,7 @@ typedef void (*udscs_disconnect_callback)(struct udscs_connection *conn);
>  struct udscs_connection *udscs_connect(const char *socketname,
>      udscs_read_callback read_callback,
>      udscs_disconnect_callback disconnect_callback,
> -    const char * const type_to_string[], int no_types, int debug);
> +    int debug);
>  
>  /* Close the connection, releases the corresponding resources and
>   * sets *connp to NULL.
> @@ -135,7 +135,7 @@ struct udscs_server *udscs_create_server(const char *socketname,
>      udscs_connect_callback connect_callback,
>      udscs_read_callback read_callback,
>      udscs_disconnect_callback disconnect_callback,
> -    const char * const type_to_string[], int no_types, int debug);
> +    int debug);
>  
>  /* Close all the server's connections and releases the corresponding
>   * resources.
> diff --git a/src/vdagent/vdagent.c b/src/vdagent/vdagent.c
> index 3d195b1..616fc63 100644
> --- a/src/vdagent/vdagent.c
> +++ b/src/vdagent/vdagent.c
> @@ -147,7 +147,6 @@ static int client_setup(int reconnect)
>  {
>      while (!quit) {
>          client = udscs_connect(vdagentd_socket, daemon_read_complete, NULL,
> -                               vdagentd_messages, VDAGENTD_NO_MESSAGES,
>                                 debug);
>          if (client || !reconnect || quit) {
>              break;
> diff --git a/src/vdagentd-proto-strings.h b/src/vdagentd-proto-strings.h
> index 6e7bcee..115f67f 100644
> --- a/src/vdagentd-proto-strings.h
> +++ b/src/vdagentd-proto-strings.h
> @@ -18,11 +18,12 @@
>      You should have received a copy of the GNU General Public License
>      along with this program.  If not, see <http://www.gnu.org/licenses/>.
>  */
> +#include <vdagentd-proto.h>
>  
>  #ifndef __VDAGENTD_PROTO_STRINGS_H
>  #define __VDAGENTD_PROTO_STRINGS_H
>  
> -static const char * const vdagentd_messages[] = {
> +static const char * const vdagentd_messages[VDAGENTD_NO_MESSAGES] = {
>          "guest xorg resolution",
>          "monitors config",
>          "clipboard grab",
> diff --git a/src/vdagentd/vdagentd.c b/src/vdagentd/vdagentd.c
> index e2d6159..2b16ca4 100644
> --- a/src/vdagentd/vdagentd.c
> +++ b/src/vdagentd/vdagentd.c
> @@ -965,7 +965,6 @@ int main(int argc, char *argv[])
>      /* Setup communication with vdagent process(es) */
>      server = udscs_create_server(vdagentd_socket, agent_connect,
>                                   agent_read_complete, agent_disconnect,
> -                                 vdagentd_messages, VDAGENTD_NO_MESSAGES,
>                                   debug);
>      if (!server) {
>          if (errno == EADDRINUSE) {
> -- 
> 2.10.2
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20170124/07ae55b0/attachment.sig>


More information about the Spice-devel mailing list