/*
---------------------------------------------------------------------------
 $Id: net_rudp.h,v 1.8 2007/05/02 13:32:22 cnepveu Exp $
---------------------------------------------------------------------------
  Copyright (c) 2007 Hexago Inc. All rights reserved.

  LICENSE NOTICE: You may use and modify this source code only if you
  have executed a valid license agreement with Hexago Inc. granting
  you the right to do so, the said license agreement governing such
  use and modifications.   Copyright or other intellectual property
  notices are not to be removed from the source code.
---------------------------------------------------------------------------
*/

#ifndef _rudp_h_
#define _rudp_h_

#define RTTENGINE_G  (float)1/8
#define RTTENGINE_H  (float)1/4
#define RTTENGINE_TMIN  2
#define RTTENGINE_TMAX  30
#define RTTENGINE_MAXRTT 3
#define RTTENGINE_MAXRT  8

#include <sys/types.h>

extern SOCKET NetRUDPConnect  (char *, int);
extern int  NetRUDPClose  (SOCKET);

extern int  NetRUDPReadWrite  (SOCKET, unsigned char *, size_t, unsigned char *, size_t);

extern int  NetRUDPWrite    (SOCKET, unsigned char *, size_t);
extern int  NetRUDPPrintf   (SOCKET, char *, size_t, char *, ...);

extern int  NetRUDPRead   (SOCKET, unsigned char *, size_t);

typedef struct rudp_message_struct {
  uint32_t sequence;
  uint32_t timestamp;
} rudp_msghdr_t;


typedef struct rttengine_statistics {
  /* connected udp host stats */
  struct sockaddr* sai;

  /* stat stats */

  float rtt;
  float srtt;
  float rttvar;
  float rto;

  /* timeline stats */
  uint32_t sequence;
  int retries;
  int32_t last_recv_sequence;
  int32_t initial_timestamp;
  int apply_backoff;
  int has_peer;
  int initiated;
} rttengine_stat_t;

extern rttengine_stat_t rttengine_stats;

/* rudp engine functions */
extern int rttengine_init(rttengine_stat_t *);
extern int rttengine_deinit(rttengine_stat_t *, void *, void *);
extern void *internal_prepare_message(rudp_msghdr_t **, size_t);
extern void internal_discard_message(void *);
extern float rttengine_update(rttengine_stat_t *, uint32_t);
extern uint32_t internal_get_timestamp(rttengine_stat_t *);
extern float internal_get_adjusted_rto(float);
extern ssize_t internal_send_recv(SOCKET, void *, size_t, void *, size_t);

#endif


syntax highlighted by Code2HTML, v. 0.9.1