/* Jungle Monkey * Copyright (C) 1999-2001 The Regents of the University of Michigan * * 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 */ #ifndef _MTP_CLIENT_H #define _MTP_CLIENT_H #include #include #include /* **************************************** */ /* MTP Client */ typedef struct _MtpClient MtpClient; typedef enum { MTP_CLIENT_STATUS_OK, MTP_CLIENT_STATUS_UPDATE, MTP_CLIENT_STATUS_ERROR } MtpClientStatus; /* After these callbacks, the callee is responsible for deleting the client. */ typedef void (*MtpClientMirrorsFunc) (MtpClient* client, MtpClientStatus status, GSList* conns, gpointer user_data); /* User has ref to conns, so should be unrefed. */ typedef void (*MtpClientInfoFunc) (MtpClient* client, MtpClientStatus status, gint length, gpointer user_data); typedef void (*MtpClientMirrorFunc) (MtpClient* client, MtpClientStatus status, GConn* conn, gpointer user_data); /* User has ref to conn, so should be unrefed. */ typedef guint (*MtpClientRecvFunc) (MtpClient* client, MtpClientStatus status, const void* buffer, guint length, gpointer user_data); /* First call has buffer and length set to 0 and client->file set to the file length. After that, buffer and length will be set. */ typedef void (*MtpClientFileFunc) (MtpClient* client, MtpClientStatus status, gpointer user_data); /* Calls with OK when done, UPDATE when it reads, and ERROR on error */ /* MtpClient. url, length, and offset are public. The other fields are not. */ struct _MtpClient { GURL* url; /* URL of host */ GConn* conn; /* Connection (can be refed) */ GSList* children; /* Children clients */ guint length; /* File length */ guint8* buffer; /* Buffer */ guint offset; /* Offset in file */ gchar* path; /* Path to file */ FILE* file; /* File */ GSHA* sha; /* SHA of file */ gpointer func; /* Callback */ gpointer user_data; /* User data for callback */ }; void mtp_client_delete (MtpClient* client); /* MtpClient creator must delete client when done. */ MtpClient* mtp_client_get_mirrors (const GURL* url, MtpClientMirrorsFunc func, gpointer user_data); MtpClient* mtp_client_get_info (const GURL* url, MtpClientInfoFunc func, gpointer user_data); MtpClient* mtp_client_get_mirror (const GURL* url, MtpClientMirrorFunc func, gpointer user_data); MtpClient* mtp_client_get_file_mirror (const GURL* url, MtpClientRecvFunc func, gpointer user_data); MtpClient* mtp_client_get_file_rendezvous (const GURL* url, MtpClientRecvFunc func, gpointer user_data); MtpClient* mtp_client_get_file (const GURL* url, const gchar* path, MtpClientFileFunc func, gpointer user_data); #endif /* _MTP_CLIENT_H */