mud.h 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. #include <string.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <errno.h>
  5. #include <ctype.h>
  6. #include <time.h>
  7. #include <zlib.h>
  8. #include <stdarg.h>
  9. /*
  10. Utility macros.
  11. */
  12. #define HAS_BIT(var, bit) ((var) & (bit))
  13. #define SET_BIT(var, bit) ((var) |= (bit))
  14. #define DEL_BIT(var, bit) ((var) &= (~(bit)))
  15. #define TOG_BIT(var, bit) ((var) ^= (bit))
  16. /*
  17. Update these to use whatever your MUD uses
  18. */
  19. #define RESTRING(point, value) \
  20. { \
  21. STRFREE(point); \
  22. point = strdup(value); \
  23. }
  24. #define STRALLOC(point) \
  25. { \
  26. point = strdup(value); \
  27. }
  28. #define STRFREE(point) \
  29. { \
  30. free(point); \
  31. point = NULL; \
  32. }
  33. /*
  34. Typedefs
  35. */
  36. typedef struct mud_data MUD_DATA;
  37. typedef struct descriptor_data DESCRIPTOR_DATA;
  38. #define MUD_PORT 4321
  39. #define MAX_SKILL 269
  40. #define MAX_CLASS 8
  41. #define MAX_RACE 16
  42. #define MAX_LEVEL 99
  43. #define MAX_INPUT_LENGTH 2000
  44. #define MAX_STRING_LENGTH 10000 // Must be at least 4 times larger than max input length.
  45. #define COMPRESS_BUF_SIZE 10000
  46. #define FALSE 0
  47. #define TRUE 1
  48. #define BV00 (0 << 0)
  49. #define BV01 (1 << 0)
  50. #define BV02 (1 << 1)
  51. #define BV03 (1 << 2)
  52. #define BV04 (1 << 3)
  53. #define BV05 (1 << 4)
  54. #define BV06 (1 << 5)
  55. #define BV07 (1 << 6)
  56. #define BV08 (1 << 7)
  57. #define BV09 (1 << 8)
  58. #define BV10 (1 << 9)
  59. #define COMM_FLAG_DISCONNECT BV01
  60. #define COMM_FLAG_PASSWORD BV02
  61. #define COMM_FLAG_REMOTEECHO BV03
  62. #define COMM_FLAG_EOR BV04
  63. #define COMM_FLAG_MSDPUPDATE BV05
  64. #define COMM_FLAG_256COLORS BV06
  65. #define COMM_FLAG_UTF8 BV07
  66. #define COMM_FLAG_GMCP BV08
  67. #define MSDP_FLAG_COMMAND BV01
  68. #define MSDP_FLAG_LIST BV02
  69. #define MSDP_FLAG_SENDABLE BV03
  70. #define MSDP_FLAG_REPORTABLE BV04
  71. #define MSDP_FLAG_CONFIGURABLE BV05
  72. #define MSDP_FLAG_REPORTED BV06
  73. #define MSDP_FLAG_UPDATED BV07
  74. // As per the MTTS standard
  75. #define MTTS_FLAG_ANSI BV01
  76. #define MTTS_FLAG_VT100 BV02
  77. #define MTTS_FLAG_UTF8 BV03
  78. #define MTTS_FLAG_256COLORS BV04
  79. #define MTTS_FLAG_MOUSETRACKING BV05
  80. #define MTTS_FLAG_COLORPALETTE BV06
  81. #define MTTS_FLAG_SCREENREADER BV07
  82. #define MTTS_FLAG_PROXY BV08
  83. #define MTTS_FLAG_TRUECOLOR BV09
  84. /*
  85. Mud data, structure containing global variables.
  86. */
  87. struct mud_data
  88. {
  89. DESCRIPTOR_DATA * client;
  90. int server;
  91. int boot_time;
  92. int port;
  93. int total_plr;
  94. int top_area;
  95. int top_help;
  96. int top_mob_index;
  97. int top_obj_index;
  98. int top_room;
  99. int msdp_table_size;
  100. int mccp_len;
  101. unsigned char * mccp_buf;
  102. };
  103. /*
  104. Descriptor (channel) partial structure.
  105. */
  106. struct descriptor_data
  107. {
  108. DESCRIPTOR_DATA * next;
  109. void * character;
  110. char * host;
  111. short descriptor;
  112. struct msdp_data ** msdp_data;
  113. char * proxy;
  114. char * terminal_type;
  115. char telbuf[MAX_INPUT_LENGTH];
  116. int teltop;
  117. long long mtts;
  118. int comm_flags;
  119. short cols;
  120. short rows;
  121. z_stream * mccp2;
  122. z_stream * mccp3;
  123. };
  124. MUD_DATA *mud;
  125. /*
  126. mud.c
  127. */
  128. void log_printf(char *fmt, ...);
  129. void log_descriptor_printf(DESCRIPTOR_DATA *d, char *fmt, ...);
  130. int write_to_descriptor(DESCRIPTOR_DATA *d, char *txt, int length);
  131. char *capitalize_all(char *str);
  132. /*
  133. telopt.c
  134. */
  135. int translate_telopts ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen, unsigned char *out, int outlen );
  136. void debug_telopts ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  137. int process_do_eor ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  138. int process_will_ttype ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  139. int process_sb_ttype_is ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  140. int process_sb_naws ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  141. int process_will_new_environ ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  142. int process_sb_new_environ ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  143. int process_do_charset ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  144. int process_sb_charset ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  145. int process_do_mssp ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  146. int process_do_msdp ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  147. int process_sb_msdp ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  148. int process_do_gmcp ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  149. int process_sb_gmcp ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  150. int process_do_mccp2 ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  151. int process_dont_mccp2 ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  152. int skip_sb ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  153. void announce_support ( DESCRIPTOR_DATA *d );
  154. void descriptor_printf ( DESCRIPTOR_DATA *d, char *fmt, ...);
  155. int start_mccp2 ( DESCRIPTOR_DATA *d );
  156. void end_mccp2 ( DESCRIPTOR_DATA *d );
  157. void process_mccp2 ( DESCRIPTOR_DATA *d );
  158. void write_mccp2 ( DESCRIPTOR_DATA *d, char *txt, int length );
  159. int process_do_mccp3 ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  160. int process_sb_mccp3 ( DESCRIPTOR_DATA *d, unsigned char *src, int srclen );
  161. void end_mccp3 ( DESCRIPTOR_DATA *d );
  162. void send_echo_on ( DESCRIPTOR_DATA *d );
  163. void send_echo_off ( DESCRIPTOR_DATA *d );
  164. void send_ga ( DESCRIPTOR_DATA *d );
  165. void send_eor ( DESCRIPTOR_DATA *d );
  166. /*
  167. utils.c
  168. */
  169. int cat_sprintf ( char *dest, char *fmt, ... );
  170. void arachnos_devel ( char *fmt, ... );
  171. void arachnos_mudlist ( char *fmt, ... );
  172. /*
  173. net.c
  174. */
  175. int create_port(int port);
  176. void mainloop(void);
  177. void poll_port(void);
  178. void process_port_connections(fd_set *read_set, fd_set *write_set, fd_set *exc_set);
  179. void close_port_connection(void);
  180. int process_port_input(void);
  181. int port_new(int s);
  182. /*
  183. client.c
  184. */
  185. int recv_sb_mssp ( unsigned char *src, int srclen );
  186. /*
  187. msdp.c
  188. */
  189. void init_msdp_table ( void );
  190. void process_msdp_varval ( DESCRIPTOR_DATA *d, char *var, char *val );
  191. void msdp_send_update ( DESCRIPTOR_DATA *d );
  192. void msdp_update_var ( DESCRIPTOR_DATA *d, char *var, char *fmt, ... );
  193. void msdp_update_var_instant ( DESCRIPTOR_DATA *d, char *var, char *fmt, ... );
  194. void msdp_configure_arachnos ( DESCRIPTOR_DATA *d, int index );
  195. void msdp_configure_pluginid ( DESCRIPTOR_DATA *d, int index );
  196. void write_msdp_to_descriptor ( DESCRIPTOR_DATA *d, char *src, int length );
  197. int msdp2json ( unsigned char *src, int srclen, char *out );
  198. int json2msdp ( unsigned char *src, int srclen, char *out );
  199. /*
  200. tables.c
  201. */
  202. #define ANNOUNCE_WILL BV01
  203. #define ANNOUNCE_DO BV02
  204. extern char *telcmds[];
  205. struct telnet_type
  206. {
  207. char *name;
  208. int flags;
  209. };
  210. extern struct telnet_type telnet_table[];
  211. typedef void MSDP_FUN (struct descriptor_data *d, int index);
  212. struct msdp_type
  213. {
  214. char *name;
  215. int flags;
  216. MSDP_FUN *fun;
  217. };
  218. struct msdp_data
  219. {
  220. char *value;
  221. int flags;
  222. };
  223. extern struct msdp_type msdp_table[];