Files @ 7d1fd1fe48fc
Branch filter:

Location: DistRen/src/common/protocol.c

binki
basic TCP support for distren able to write and handle requests
/*
  Copyright 2010 Nathan Phillip Brink

  This file is a part of DistRen.

  DistRen is free software: you can redistribute it and/or modify
  it under the terms of the GNU Affero General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  DistRen 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 Affero General Public License for more details.

  You should have received a copy of the GNU Affero General Public License
  along with DistRen.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "protocol.h"

#include <malloc.h>
#include <string.h>

#define DISTREN_REQUEST_MAGIC (0x32423434)

int distren_request_new(struct distren_request **req, uint32_t len, enum distren_request_type type)
{
  struct distren_request *newreq;

  newreq = malloc(sizeof(struct distren_request));
  if(!newreq)
    {
      (*req) = NULL;
      return 1;
    }

  newreq->magic = DISTREN_REQUEST_MAGIC;
  newreq->len = len;
  newreq->type = type;

  (*req) = newreq;
  return 0;
}

int distren_request_new_fromdata(struct distren_request **req, void *data, size_t len)
{
  struct distren_request *newreq;

  if(len < sizeof(struct distren_request))
    return 1;

  if( ((struct distren_request *)data)->magic != DISTREN_REQUEST_MAGIC )
    {
      fprintf(stderr, "packet doesn't match magic stuffs\n");
      return 1;
    }

  newreq = malloc(sizeof(struct distren_request));
  if(!newreq)
    {
      fprintf(stderr, "OOM\n");
      return 1;
    }

  memcpy(newreq, data, sizeof(struct distren_request));
  (*req) = newreq;
  return 0;
}

int distren_request_free(struct distren_request *req)
{
  free(req);
  return 0;
}