File: newserver.h

package info (click to toggle)
crossfire 1.71.0%2Bdfsg1-2
  • links: PTS
  • area: main
  • in suites: buster
  • size: 28,076 kB
  • sloc: ansic: 85,126; sh: 11,978; perl: 2,659; lex: 2,044; makefile: 1,271
file content (163 lines) | stat: -rw-r--r-- 6,355 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
/**
 * @file
 * Defines various structures and values that are used for the
 * new client server communication method.  Values defined here are only
 * used on the server side code.  For shared client/server values, see
 * @ref newclient.h
*/

#ifndef NEWSERVER_H
#define NEWSERVER_H

/**
 * The lower bound for the number of objects to send for the 'look' window
 * (container or ground view).
 */
#define MIN_NUM_LOOK_OBJECTS 3 /* 3=prev group, one object, next group */

/**
 * Default value for the number of objects to send for the 'look' window
 * (container or ground view).
 */
#define DEFAULT_NUM_LOOK_OBJECTS 50

/**
 * The upper bound for the number of objects to send for the 'look' window
 * (container or ground view).
 */
#define MAX_NUM_LOOK_OBJECTS 100

/** One map cell, as sent to the client. */
struct map_cell_struct {
    uint16 faces[MAP_LAYERS];   /**< Face numbers. */
    int darkness;               /**< Cell's darkness. */
};

/**
 * This basically defines the largest size an
 * archetype may be - it is used for allocation of
 * some structures, as well as determining how far
 * we should look for the heads of big images.
 */
#define MAX_HEAD_OFFSET 8

#define MAX_CLIENT_X (MAP_CLIENT_X+MAX_HEAD_OFFSET)
#define MAX_CLIENT_Y (MAP_CLIENT_Y+MAX_HEAD_OFFSET)

/** One map for a player. */
struct Map {
    struct map_cell_struct cells[MAX_CLIENT_X][MAX_CLIENT_Y];
};

/** True max is 16383 given current map compaction method. */
#define MAXANIMNUM  2000

/** Contains the last range/title information sent to client. */
struct statsinfo {
    char *range, *title;
};


/**
 * What state a socket is in.
 */
enum Sock_Status {
    Ns_Avail,
    Ns_Add,
    Ns_Dead
};

/**
 * Contains parameters for socket() and bind() for listening sockets.
 * This struct contains most fields of "struct addrinfo", but
 * older systems do not know struct addrinfo yet.
 */
struct listen_info {
    int family;
    int socktype;
    int protocol;
    socklen_t addrlen;
    struct sockaddr *addr;
};

/**
 * The following is the setup for a ring buffer for storing outbut
 * data that the OS can't handle right away.
 */
typedef struct buffer_struct {
    char    data[SOCKETBUFSIZE];
    int     start;
    int     len;
} buffer_struct;

/** How many times we are allowed to give the wrong password before being kicked. */
#define MAX_PASSWORD_FAILURES 5

/**
 * Socket structure, represents a client-server connection.
 */
typedef struct socket_struct {
    enum Sock_Status status;
    int         fd;
    struct listen_info  *listen;
    struct Map  lastmap;
    sint8       map_scroll_x, map_scroll_y;
    size_t      faces_sent_len;         /**< This is the number of elements allocated in faces_sent[]. */
    uint8       *faces_sent;            /**< This is a bitmap on sent face status. */
    uint8       anims_sent[MAXANIMNUM]; /**< What animations we sent. */
    struct statsinfo stats;
    SockList    inbuf;                  /**< If we get an incomplete packet, this is used to hold the data. */
    char        *host;                  /**< Which host it is connected from (ip address). */
    buffer_struct outputbuffer;         /**< For undeliverable data. */
    uint8       password_fails;         /**< How many times the player has failed to give the right password. */
    uint32      facecache:1;            /**< If true, client is caching images. */
    uint32      darkness:1;             /**< True if client wants darkness information. */
    uint32      update_look:1;          /**< If true, we need to send the look window. */
    uint32      update_inventory:1;     /**< If true, we need to send the inventory list. */
    uint32      can_write:1;            /**< Can we write to this socket? */
    uint32      tick:1;                 /**< Client wishes to get tick commands. */
    uint32      is_bot:1;               /**< Client shouldn't be reported to metaserver. */
    uint32      want_pickup:1;          /**< Client wants pickup information when logging in. */
    uint32      extended_stats:1;       /**< Client wants base and maximum statistics information. */
    uint32      monitor_spells;         /**< Client wishes to be informed when their spell list changes. */
    uint32      sound;                  /**< Client sound mode. */
    uint32      cs_version, sc_version; /**< Versions of the client. */
    uint16      look_position;          /**< Start of drawing of look window. */
    uint16      container_position;     /**< Start of container contents to send to client. */
    uint8       mapx, mapy;             /**< How large a map the client wants. */
    uint8       faceset;                /**< Set the client is using, default 0. */

    /* Below are flags for extedend infos to pass to client
     * with S->C mapextended command (note: this comment seems incorrect?) */
    sint8       sounds_this_tick;       /**< Number of sounds sent this tick. */
    uint8       num_look_objects;       /**< The maximum number of objects to show on the ground view;
                                             this number includes the prev/next group fake items.
                                             Can be set through "num_look_objects" setup option;
                                             defaults to DEFAULT_NUM_LOOK_OBJECTS. */
    char    *account_name;              /**< Name of the account logged in on this socket */
    Account_Char    *account_chars;     /**< Detailed information on characters on this account */
    uint8   login_method;               /**< Login method this client is using */
    uint16      notifications;          /**< Notifications this client wants to get. */
} socket_struct;

/**
 * Bitmask for the faces_sent[] array - what
 * portion of the face have we sent?
 */
#define NS_FACESENT_FACE        0x1
#define NS_FACESENT_SMOOTH      0x2

/** Holds some system-related information. */
typedef struct Socket_Info {
    struct timeval timeout;     /**< Timeout for select. */
    int     max_filedescriptor; /**< max filedescriptor on the system. */
    int     allocated_sockets;  /**< Number of allocated items in ::init_sockets. */
} Socket_Info;

extern Socket_Info socket_info;

#define VERSION_CS 1023    /**< Version >= 1023 understand setup cmd */
#define VERSION_SC 1029
#define VERSION_INFO "Crossfire Server"

#endif /* NEWSERVER_H */