blender/extern/verse/dist/verse_ms.h
Nathan Letwory b2a8417fce Add Verse master-server functionality
* added two files from verse-master
* server list is available in outliner (new mode "Verse Servers")
* verse sessions are now also in new mode "Verse Sessions" in outliner
* fixed drawing of verse sessions and their nodes
* in user preferences System & OpenGL master-server ip setting (default master.uni-verse.org)
* in File>Verse entry "Get Servers" to get server list or
* RMB on "Available Verse Servers" in outliner to "Refresh" server list

Enjoy :)
2006-10-12 11:53:50 +00:00

73 lines
2.9 KiB
C

/*
* This is Verse Master Server, a small help library to aid application developers
* make their applications interact with a Verse master server.
*
* There are two steps to the process:
*
* 1) Send a MS:GET request to a master server. This is done by the verse_ms_get_send()
* function, which calls verse_send_ping() internally.
*
* 2) Parse any returned MS:LIST packets. This is a two-step process. The application
* still owns the ping callback, and will need to check for received pings that
* start with MS:LIST, and call the verse_ms_list_parse() function to parse those.
*
* A successfully parsed MS:LIST packet will result in an array of VMSServer pointers
* being returned. Each VMSServer instance describes one server. Use the provided
* functions to query each server structure.
*
* The application should call free() on the returned vector, whenever it is done with
* the data (perhaps after copying it into application-defined data structures).
*
* For a lot more detail about the Verse master server protocol, please see
* the spec at <http://verse.blender.org/cms/Master_Server__v2.775.0.html>.
*
* This code was written in 2006 by Emil Brink. It is released as public domain.
*
*/
#define VERSE_MS_VERSION "1.0"
#if defined __cplusplus
extern "C" {
#endif
typedef struct {
const char *name; /* Field name. Upper-case. */
const char *value; /* Field value. Fully parsed, might contain spaces. */
} VMSField;
typedef struct {
const char *ip; /* IP address of server, in dotted decimal:port. */
unsigned int num_fields; /* Number of fields of extra info. */
VMSField *field; /* Vector of fields, or NULL if none. */
} VMSServer;
/* Formats and sends a MS:GET ping packet to the master server. The <fields> argument
* should be a combination of VERSE_MS_FIELD_ mask values. If <tags> is set, it should
* be a comma-separated set of include/exclude tags, like "a,b,-c,d,-e".
*/
#define VERSE_MS_FIELD_DESCRIPTION (1 << 0)
extern void verse_ms_get_send(const char *address, int fields, const char *tags);
/* Parses a master server response. This will be a string of the form "MS:LIST IP=blah ...",
* which is split into one struct per IP, and any additional fields parsed (unquoted etc).
* Returns an array of VMSServer pointers, which is NULL-terminated. Returns NULL if there
* was a parse error somewhere in the string, no partial success is possible.
*/
extern VMSServer ** verse_ms_list_parse(const char *list);
/* This is the only standard field name, currently. */
#define VERSE_MS_FIELD_DESCRIPTION_NAME "DE" /* Human-readable server description. */
/* Checks wether the given server has a field with the given name. */
extern int verse_ms_field_exists(const VMSServer *ms, const char *name);
/* Returns the value for the named field in the given server, if present.
* If not, NULL is returned.
*/
extern const char * verse_ms_field_value(const VMSServer *ms, const char *name);
#if defined __cplusplus
}
#endif