File: util.h

package info (click to toggle)
libnginx-mod-http-push-stream 0.6.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,272 kB
  • sloc: ruby: 7,101; ansic: 6,048; javascript: 2,121; sh: 53; makefile: 16
file content (83 lines) | stat: -rw-r--r-- 2,772 bytes parent folder | download
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
#ifndef _UTIL_H_
#define _UTIL_H_

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/epoll.h>
#include <netdb.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>

#define error(...)  {fprintf(stderr, __VA_ARGS__);}
#define error2(...) {error(__VA_ARGS__); exitcode = EXIT_FAILURE; goto exit;}
#define error3(...) {perror("ERROR");error(__VA_ARGS__); exitcode = EXIT_FAILURE; goto exit;}
#define error4(...) {perror("ERROR");error(__VA_ARGS__);}

#define info(...) {if (verbose_messages >= 1) {fprintf(stdout, __VA_ARGS__);}}
#define debug(...) {if (verbose_messages >= 2) {fprintf(stdout, __VA_ARGS__);}}
#define trace(...) {if (verbose_messages >= 3) {fprintf(stdout, __VA_ARGS__);}}

#define summary(...) fprintf(stdout, __VA_ARGS__)

#define VERSION   "0.1"
#define COPYRIGHT "Copyright (C) 2011 Michael Costello, Wandenberg Peixoto <wandenberg@gmail.com>"
#define DESCRIPTION_PUBLISHER "'%s' v%s - program to publish messages to test Push Stream Module.\n%s\n"
#define DESCRIPTION_SUBSCRIBER "'%s' v%s - program to subscribe channels to test Push Stream Module.\n%s\n"

#define DEFAULT_NUM_MESSAGES    1
#define DEFAULT_CONCURRENT_CONN 1
#define DEFAULT_NUM_CHANNELS    1
#define DEFAULT_SERVER_HOSTNAME "127.0.0.1"
#define DEFAULT_SERVER_PORT     9080
#define DEFAULT_TIMEOUT         1000

#define MAX_EVENTS (60000 * 8)
#define ITERATIONS_TILL_SUMMARY_PER_TIMEOUT 10000 //timeout: 1000 -> summary each 10 seconds
#define BUFFER_SIZE 1024
#define BIG_BUFFER_SIZE 640000

typedef struct
{
    long requested_connections;
    long connections;
    long messages;
    long bytes_written;
    long bytes_read;
} Statistics;

enum State {INIT=0, CONNECTING, CONNECTED, CLOSED};

// store per connection state here
typedef struct
{
    int		   index;
    int        main_sd;
    int		   sd;
    int		   message_count;
    int		   num_messages;
    int		   channel_count;
    long	   channel_id;
    long	   channel_start;
    long	   channel_end;
    char       content_buffer[BUFFER_SIZE];
    int        content_length;
    enum State state;
    struct sockaddr_in *server_address;
} Connection;

static int verbose_messages = 0;

int fill_server_address(const char *server_hostname, int server_port, struct sockaddr_in *server_address);
Connection *init_connections(int count, struct sockaddr_in *server_address, int main_sd);
int open_connection(Connection *connection);
void close_connection(Connection *connection);
int reopen_connection(Connection *connection);
int write_connection(Connection *connection, Statistics *stats, char *buffer, int buffer_len);
int change_connection(Connection *connection, uint32_t events);
float calc_message_per_second(int num_messages, int start_time);


#endif /* _UTIL_H_ */