/* -*- c -*-
*
* ----------------------------------------------------------------------
* CcXstream Client Library for XBOX Media Player
* ----------------------------------------------------------------------
*
* Copyright (c) 2002-2003 by PuhPuh
*
* This code is copyrighted property of the author. It can still
* be used for any non-commercial purpose following conditions:
*
* 1) This copyright notice is not removed.
* 2) Source code follows any distribution of the software
* if possible.
* 3) Copyright notice above is found in the documentation
* of the distributed software.
*
* Any express or implied warranties are disclaimed. Author is
* not liable for any direct or indirect damages caused by the use
* of this software.
*
* ----------------------------------------------------------------------
*
*/
#ifndef CC_XCLIENT_H_INCLUDED
#define CC_XCLIENT_H_INCLUDED 1
#include "ccxversion.h"
#include "ccxpacket.h"
/* The definition of CcXstreamServerConnection is system dependent.
In unix like systems this is simply int that is a file descriptor
of the connection socket. */
#ifdef _XBOX
typedef SOCKET CcXstreamServerConnection;
#else /* _XBOX */
typedef int CcXstreamServerConnection;
#endif /* _XBOX */
typedef struct CcXstreamReplyPacketRec *CcXstreamReplyPacket;
struct CcXstreamReplyPacketRec {
CcXstreamPacket type;
unsigned long id;
unsigned long handle;
unsigned long error;
unsigned char *string1;
size_t string1_len;
unsigned char *string2;
size_t string2_len;
};
typedef enum {
/* Command was succesful and session can continue. */
CC_XSTREAM_CLIENT_OK = 0,
/* Command was failed but session is ok. */
CC_XSTREAM_CLIENT_COMMAND_FAILED = 1,
/* Command was probably failed and session is broken. */
CC_XSTREAM_CLIENT_FATAL_ERROR = 2,
/* Server host not found. */
CC_XSTREAM_CLIENT_SERVER_NOT_FOUND = 3,
/* Server host found but connection attempt failed. */
CC_XSTREAM_CLIENT_SERVER_CONNECTION_FAILED = 4
} CcXstreamClientError;
CcXstreamClientError cc_xstream_client_connect(const char *host,
int port,
CcXstreamServerConnection *s);
CcXstreamClientError cc_xstream_client_disconnect(CcXstreamServerConnection s);
unsigned char *cc_xstream_client_read_data(CcXstreamServerConnection s,
size_t len,
unsigned long timeout_ms);
int cc_xstream_client_write_data(CcXstreamServerConnection s,
unsigned char *buf,
size_t len,
unsigned long timeout_ms);
/* Make a packet that can be sent to the server directly. Return
value is an operation identifier that is selecte by the client
library and embedded into the packet. Server always returns a
packet with same id number. This is a low level interface that may
be used, if fully asynchronous client is needed. */
CcXstreamClientError cc_xstream_client_version_handshake(CcXstreamServerConnection s);
unsigned long cc_xstream_client_mkpacket_setcwd(const char *path,
unsigned char **p, size_t *p_len);
unsigned long cc_xstream_client_mkpacket_upcwd(unsigned long levels,
unsigned char **p, size_t *p_len);
unsigned long cc_xstream_client_mkpacket_filelist_open(unsigned char **p, size_t *p_len);
unsigned long cc_xstream_client_mkpacket_filelost_read(unsigned long handle,
unsigned char **p, size_t *p_len);
unsigned long cc_xstream_client_mkpacket_file_info(const char *path,
unsigned char **p, size_t *p_len);
unsigned long cc_xstream_client_mkpacket_file_open(const char *path,
unsigned char **p, size_t *p_len);
unsigned long cc_xstream_client_mkpacket_file_read(unsigned long handle, size_t len,
unsigned char **p, size_t *p_len);
unsigned long cc_xstream_client_mkpacket_seek(unsigned long handle,
int seek_type, CC_UINT_64_TYPE_NAME bytes,
unsigned char **p, size_t *p_len);
unsigned long cc_xstream_client_mkpacket_close(unsigned long handle,
unsigned char **p, size_t *p_len);
unsigned long cc_xstream_client_mkpacket_close_all(unsigned char **p, size_t *p_len);
unsigned long cc_xstream_client_mkpacket_setconfoption(const char *option,
const char *value,
unsigned char **p, size_t *p_len);
unsigned long cc_xstream_client_mkpacket_authentication_init(const char *method,
unsigned char **p, size_t *p_len);
unsigned long cc_xstream_client_mkpacket_authenticate_password(unsigned long handle,
const char *user_id,
const char *password,
unsigned char **p, size_t *p_len);
unsigned long cc_xstream_client_mkpacket_server_discovery(unsigned char **p, size_t *p_len);
/* Packet reading and parsing fuctionality is also quite low level.
It is mainly needed for applications that implement fully
asynchronous protocol session. */
/* Packet is passed to this function without length field. */
CcXstreamReplyPacket cc_xstream_client_reply_packet_parse(const unsigned char *packet,
size_t packet_len);
/* Read a packet from the socket and parse it. */
CcXstreamClientError cc_xstream_client_reply_packet_read(CcXstreamServerConnection s,
CcXstreamReplyPacket *packet);
/* Free the packet. */
void cc_xstream_client_reply_packet_free(CcXstreamReplyPacket packet);
/* Following interfaces provide a synchronous interface to the server.
If this interface is used, the user can't send his own commands
directly bypassing this interface. */
CcXstreamClientError cc_xstream_client_setcwd(CcXstreamServerConnection s,
const char *path);
CcXstreamClientError cc_xstream_client_upcwd(CcXstreamServerConnection s,
unsigned long levels);
CcXstreamClientError cc_xstream_client_close_all(CcXstreamServerConnection s);
CcXstreamClientError cc_xstream_client_file_open(CcXstreamServerConnection s,
const char *path,
unsigned long *handle);
CcXstreamClientError cc_xstream_client_file_read(CcXstreamServerConnection s,
unsigned long handle,
size_t len,
unsigned char **data,
size_t *data_len);
CcXstreamClientError cc_xstream_client_dir_open(CcXstreamServerConnection s,
unsigned long *handle);
CcXstreamClientError cc_xstream_client_dir_read(CcXstreamServerConnection s,
unsigned long handle,
char **name,
char **info);
CcXstreamClientError cc_xstream_client_close(CcXstreamServerConnection s,
unsigned long handle);
CcXstreamClientError cc_xstream_client_file_forward(CcXstreamServerConnection s,
unsigned long handle,
CC_UINT_64_TYPE_NAME bytes,
int seek_eof_if_fails);
CcXstreamClientError cc_xstream_client_file_backwards(CcXstreamServerConnection s,
unsigned long handle,
CC_UINT_64_TYPE_NAME bytes,
int rewind_if_fails);
CcXstreamClientError cc_xstream_client_file_rewind(CcXstreamServerConnection s,
unsigned long handle);
CcXstreamClientError cc_xstream_client_file_end(CcXstreamServerConnection s,
unsigned long handle);
CcXstreamClientError cc_xstream_client_file_info(CcXstreamServerConnection s,
const char *path,
char **info);
CcXstreamClientError cc_xstream_client_set_configuration_option(CcXstreamServerConnection s,
const char *option,
const char *value);
CcXstreamClientError cc_xstream_client_password_authenticate(CcXstreamServerConnection s,
const char *user_id,
const char *password);
/* Server discovery function. May not be supported in all systems. */
typedef void (*CcXstreamServerDiscoveryCB)(const char *addr,
const char *port,
const char *version,
const char *comment,
void *context);
CcXstreamClientError ccx_client_discover_servers(CcXstreamServerDiscoveryCB callback, void *context);
#define CC_XSTREAM_CLIENT_VERSION_STR "XBMSP-1.0 CcXstream Client Library " CC_XSTREAM_SW_VERSION
#define CC_XSTREAM_CLIENT_VERSION "1.0"
/* If the server end is inresponsive for 10 seconds, connection will halt. */
#define CCXSTREAM_CLIENT_TIMEOUT_SECONDS 10
#endif /* CC_XCLIENT_H_INCLUDED */
/* eof (ccxclient.h) */
syntax highlighted by Code2HTML, v. 0.9.1