/*
 * c't-Sim - Robotersimulator fuer den c't-Bot
 * 
 * This program 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. 
 * This program 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 this program; if not, write to the Free 
 * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307, USA.
 * 
 */

/*! @file 	tcp.h
 * @brief 	TCP/IP-Kommunikation
 * @author 	Benjamin Benz (bbe@heise.de)
 * @date 	26.12.05
*/

#ifndef TCP_H_
#define TCP_H_

#if defined WIN32
 	#define LITTLE_ENDIAN	1234
 	#define BIG_ENDIAN	4321
 	#define BYTE_ORDER	LITTLE_ENDIAN
#elif defined __linux__
 	#include <endian.h>
#else
	#include <machine/endian.h>
 #endif

#include "bot-2-sim.h"
#include "command.h"


#define IP "localhost"		/*!<  IP, mit der verbunden werden soll (normalerweise localhost) */
//#define IP "10.10.22.242"		
#define PORT 10001			/*!<  Port, mit dem verbunden werden soll  */

extern int tcp_sock;			/*!< Unser TCP-Socket */
extern char *tcp_hostname;		/*!< Hostname, auf dem ct-Sim laeuft */

/*!
 * Sende Kommando per TCP/IP im Little Endian
 * @param cmd Zeiger auf das Kommando
 * @return Anzahl der gesendete Bytes
 */
int tcp_send_cmd(command_t *cmd);


/*!
 * Uebertrage Daten per TCP/IP
 * @param data Zeiger auf die Daten
 * @param length Anzahl der Bytes
 * @return Anzahl der uebertragenen Bytes
*/
int tcp_write(void* data, int length);

/*!
 * Lese Daten von TCP/IP-Verbindung.
 * Achtung: blockierend!
 * @param data Zeiger auf die Daten
 * @param length Anzahl der gewuenschten Bytes
 * @return Anzahl der uebertragenen Bytes
*/
int tcp_read(void* data, int length);

/*!
 * Oeffnet eine TCP-Verbindung zum Server 
 * @param hostname Symbolischer Name des Host, auf dem ct-Sim laeuft
 * @return Der Socket
*/
int tcp_openConnection(const char *hostname);

/*! 
 * Initialisiere TCP/IP Verbindung 
 */ 
void tcp_init(void);

/*! 
 * Schreibt den Sendepuffer auf einen Schlag raus 
 * @return -1 bei Fehlern, sonst zahl der uebertragenen Bytes
 */
int flushSendBuffer(void);
#endif
