along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id: meta.c,v 1.1.2.29 2002/09/09 21:24:34 guus Exp $
+ $Id: meta.c,v 1.1.2.33 2003/03/19 11:45:05 guus Exp $
*/
#include "config.h"
#include "system.h"
#include "protocol.h"
-int send_meta(connection_t * c, char *buffer, int length)
+int send_meta(connection_t *c, char *buffer, int length)
{
char *bufp;
int outlen;
char outbuf[MAXBUFSIZE];
+ int result;
cp();
} else
bufp = buffer;
- if(write(c->socket, bufp, length) < 0) {
- syslog(LOG_ERR, _("Sending meta data to %s (%s) failed: %s"), c->name,
- c->hostname, strerror(errno));
- return -1;
+ while(length) {
+ result = write(c->socket, bufp, length);
+ if(result <= 0) {
+ if(errno == EINTR)
+ continue;
+ syslog(LOG_ERR, _("Sending meta data to %s (%s) failed: %s"), c->name,
+ c->hostname, strerror(errno));
+ return -1;
+ }
+ bufp += result;
+ length -= result;
}
-
+
return 0;
}
-void broadcast_meta(connection_t * from, char *buffer, int length)
+void broadcast_meta(connection_t *from, char *buffer, int length)
{
avl_node_t *node;
connection_t *c;
}
}
-int receive_meta(connection_t * c)
+int receive_meta(connection_t *c)
{
- int x, l = sizeof(x);
+ int x;
+ socklen_t l = sizeof(x);
int oldlen, i;
int lenin, reqlen;
int decrypted = 0;
/* Decrypt */
if(c->status.decryptin && !decrypted) {
- EVP_DecryptUpdate(c->inctx, inbuf, &lenin, c->buffer + oldlen,
- lenin);
+ EVP_DecryptUpdate(c->inctx, inbuf, &lenin, c->buffer + oldlen, lenin);
memcpy(c->buffer + oldlen, inbuf, lenin);
decrypted = 1;
}