diff options
Diffstat (limited to 'server')
| -rw-r--r-- | server/src/journal_commit.cc | 124 | ||||
| -rw-r--r-- | server/src/journal_commit.h | 36 | 
2 files changed, 160 insertions, 0 deletions
| diff --git a/server/src/journal_commit.cc b/server/src/journal_commit.cc new file mode 100644 index 0000000..336ac7a --- /dev/null +++ b/server/src/journal_commit.cc @@ -0,0 +1,124 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + *            journal_commit.cc + * + *  Tue Mar 18 11:10:00 CET 2008 + *  Copyright 2008 Bent Bisballe Nyeng, Lars Bisballe Jensen and Peter Skaarup + *  deva@aasimon.org, elsenator@gmail.com and piparum@piparum.dk + ****************************************************************************/ + +/* + *  This file is part of Pracro. + * + *  Pracro is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  Pracro is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with Pracro; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#include "journal_commit.h" + +// for gethostbyname +#include <netdb.h> + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> +#include <unistd.h> +#include <endian.h> +#include <arpa/inet.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <stdarg.h> +#include <fcntl.h> +#include <time.h> + +//#define NO_NETWORK + +static int mwrite(int sock, char *fmt, ...) +{ +  int l = 0; +  va_list args; +  char *buffer; + +  buffer = (char*)malloc(64*1024); + +  va_start(args, fmt); +  l = vsnprintf(buffer, 64*1024, fmt, args); +  va_end(args); +   +  write(sock, buffer, l); +  +  free(buffer); + +  return l; +} + +int journal_commit(const char *cpr, const char *user, +                   const char *addr, unsigned short int port, +                   const char *buf, size_t size) +{ +  struct sockaddr_in sin; +  int sock = 1; + +#ifndef NO_NETWORK +  // Do DNS lookup +  char *ip; +  struct in_addr **addr_list; +  struct hostent *he; +  he = gethostbyname(addr); +  if(!he || !he->h_length) { +    fprintf(stderr, "gethostbyname(%s) failed!\n", addr); +    perror(":"); +    return -1; +  } + +  addr_list = (struct in_addr **)he->h_addr_list; +  //  Get first value. We know for sure that there are at least one. +  ip = inet_ntoa(*addr_list[0]); + +  // open socket +  memset(&sin, 0, sizeof(sin)); +  sin.sin_family = AF_INET; +  sin.sin_addr.s_addr = inet_addr(ip); +  sin.sin_port = htons(port); +   +  if( (sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { +    fprintf(stderr, "Socket() failed!\n"); +    return -1; +  } +   +  if(connect(sock, (struct sockaddr *) &sin, sizeof(sin)) < 0) { +    fprintf(stderr, "Connect() failed!\n"); +    perror(":"); +    return -1; +  } +#endif/*NO_NETWORK*/ + +  // send header +  mwrite(sock, "PUT JOURNAL PROTO1.0 \r\n");   +  mwrite(sock, "size : %i\r\n", size);   +  mwrite(sock, "user: %s\r\n", user); +  //  mwrite(sock, "password: 1234\r\n"); +  mwrite(sock, "cpr: %s\r\n", cpr); +  mwrite(sock, "date: %i\r\n", time(NULL)); +  mwrite(sock, "charset: utf8\r\n"); +  mwrite(sock, "\r\n"); + +  // send body +  write(sock, buf, size); + +  // close socket +  close(sock); + +  return 0; +} diff --git a/server/src/journal_commit.h b/server/src/journal_commit.h new file mode 100644 index 0000000..9918a7b --- /dev/null +++ b/server/src/journal_commit.h @@ -0,0 +1,36 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + *            journal_commit.h + * + *  Tue Mar 18 11:09:59 CET 2008 + *  Copyright 2008 Bent Bisballe Nyeng, Lars Bisballe Jensen and Peter Skaarup + *  deva@aasimon.org, elsenator@gmail.com and piparum@piparum.dk + ****************************************************************************/ + +/* + *  This file is part of Pracro. + * + *  Pracro is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  Pracro is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with Pracro; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#ifndef __PRACRO_JOURNAL_COMMIT_H__ +#define __PRACRO_JOURNAL_COMMIT_H__ + +#include <stdlib.h> + +int journal_commit(const char *cpr, const char *user, +                   const char *ip, unsigned short int port, +                   const char *buf, size_t size); + +#endif/*__PRACRO_JOURNAL_COMMIT_H__*/ | 
