client/message.c

Sun, 30 Nov 2025 18:15:46 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 30 Nov 2025 18:15:46 +0100
changeset 942
488178e3e328
permissions
-rw-r--r--

add initial client code

942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2025 Olaf Wintermann. All rights reserved.
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include <stdio.h>
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #include <stdlib.h>
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 #include <unistd.h>
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 #include "message.h"
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35 MessageHandler* simple_msg_handler(int in, int out, msg_received_callback callback) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 SimpleMessageHandler *handler = malloc(sizeof(SimpleMessageHandler));
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 handler->handler.start = simple_msg_handler_start;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38 handler->handler.stop = simple_msg_handler_stop;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 handler->handler.send = simple_msg_handler_send;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40 handler->handler.callback = callback;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 handler->in = in;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 handler->out = out;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 handler->outbuf = cxBufferCreate(NULL, 4096, NULL, CX_BUFFER_FREE_CONTENTS | CX_BUFFER_AUTO_EXTEND);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 handler->stop = 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 pthread_mutex_init(&handler->queue_lock, NULL);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 pthread_mutex_init(&handler->avlbl_lock, NULL);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 pthread_cond_init(&handler->available, NULL);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 return (MessageHandler*)handler;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51 int simple_msg_handler_start(MessageHandler *handler) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 SimpleMessageHandler *sh = (SimpleMessageHandler*)handler;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53 if(pthread_create(&sh->in_thread, NULL, simple_msg_handler_in_thread, sh)) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 return 1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56 if(pthread_create(&sh->out_thread, NULL, simple_msg_handler_out_thread, sh)) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 return 1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
58 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
59 return 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62 int simple_msg_handler_stop(MessageHandler *handler) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
63 SimpleMessageHandler *sh = (SimpleMessageHandler*)handler;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 pthread_mutex_lock(&sh->queue_lock);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65 sh->stop = 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66 pthread_cond_signal(&sh->available);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 pthread_mutex_unlock(&sh->queue_lock);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68 close(sh->in);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69 sh->in = -1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
70
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
71 pthread_join(sh->in_thread, NULL);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72 pthread_join(sh->out_thread, NULL);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
73
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74 return 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
75 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
77 int simple_msg_handler_send(MessageHandler *handler, cxstring msg) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78 SimpleMessageHandler *sh = (SimpleMessageHandler*)handler;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
79 pthread_mutex_lock(&sh->queue_lock);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 cxBufferWrite(msg.ptr, 1, msg.length, sh->outbuf);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
81 pthread_cond_signal(&sh->available);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
82 pthread_mutex_unlock(&sh->queue_lock);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83 return 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86 #define HEADERBUF_SIZE 64
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
88 void* simple_msg_handler_in_thread(void *data) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 SimpleMessageHandler *handler = data;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
91 char *msg = NULL;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
92 size_t msg_size = 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
93 size_t msg_pos = 0; // currently received message length
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
94
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
95 char headerbuf[HEADERBUF_SIZE];
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
96 size_t headerpos = 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
97
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
98 char buf[2048];
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99 ssize_t r;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
100 while((r = read(handler->in, buf, 2024)) > 0) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
101 char *buffer = buf;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102 size_t available = r;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
104 while(available > 0) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105 if(msg) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
106 // read message
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
107 size_t need = msg_size - msg_pos;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
108 size_t cplen = r > need ? need : available;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
109 memcpy(msg+msg_pos, buffer, cplen);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
110 buffer += cplen;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
111 available -= cplen;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
112 msg_pos += cplen;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
113 if(msg_pos == msg_size) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
114 // message complete
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
115 //fprintf(stderr, "send: %.*s\n", (int)msg_size, msg);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 if(handler->handler.callback) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
117 handler->handler.callback(cx_mutstrn(msg, msg_size));
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
118 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119 msg = NULL;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120 msg_size = 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121 msg_pos = 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123 } else {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
124 size_t header_max = HEADERBUF_SIZE - headerpos - 1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125 if(header_max > available) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
126 header_max = available;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
127 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
128 // search for line break
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
129 int i;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
130 int header_complete = 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
131 for(i=0;i<header_max;i++) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
132 if(buffer[i] == '\n') {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
133 header_complete = 1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
134 break;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
135 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
136 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
137 i++;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
138 memcpy(headerbuf+headerpos, buffer, i);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
139 headerpos += i;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
140 buffer += i;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
141 available -= i;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
142
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
143 if(header_complete) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
144 headerbuf[headerpos-1] = 0; // terminate buffer
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
145 char *end;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
146 long length = strtol(headerbuf, &end, 10);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
147 if(*end == '\0') {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
148 //fprintf(stderr, "header: %d\n", (int)length);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
149 msg = malloc(length);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
150 msg_size = length;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
151 headerpos = 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
152 } else {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
153 fprintf(stderr, "Error: invalid message {%s}\n", headerbuf);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
154 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
155 } else if(headerpos+1 >= HEADERBUF_SIZE) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
156 fprintf(stderr, "Error: message header too big\n");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
157 exit(-1);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
158 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
159 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
160 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
161
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
162
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
163 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
164 perror("error");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
165 fprintf(stderr, "stop simple_msg_handler_in_thread\n");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
166
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
167 return NULL;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
168 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
169
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
170 void* simple_msg_handler_out_thread(void *data) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
171 SimpleMessageHandler *handler = data;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
172
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
173 return NULL;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
174 }

mercurial