File: streamer.h

package info (click to toggle)
linuxtrade 3.65-6
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 2,880 kB
  • ctags: 1,969
  • sloc: ansic: 30,091; sh: 2,278; perl: 566; makefile: 126
file content (156 lines) | stat: -rw-r--r-- 4,599 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
/*b
 * Copyright (C) 2001,2002  Rick Richardson
 *
 * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 * Author: Rick Richardson <rickr@mn.rr.com>
b*/

typedef struct streamerpub	*STREAMER;
typedef struct streamerpriv	*STREAMERPRIV;

#define	SR_ERR	-1
#define	SR_AUTH	-100

typedef struct streamerpub
{
	int 	(*open)(
			STREAMER sr, RCFILE *rcp,
			FILE *readfile
			);
	int	(*select)(
			STREAMER sr,
			int n, fd_set *readfds, fd_set *writefds,
			fd_set *exceptfds, struct timeval *timeout
			);
	void	(*close)(STREAMER sr);

	void	(*record)(STREAMER sr, FILE *fp);

	void	(*timetick)(STREAMER sr, time_t now);
			#define TICKHZ	1

	// Quotes...
	void	(*send_quickquote)(STREAMER sr, char *sym);

	void	(*send_livequote)(STREAMER sr, char *sym);
	void	(*send_livequote_end)(STREAMER sr);

	void	(*send_symbols)(STREAMER sr, char *symbols, int add);
	void	(*send_symbols_end)(STREAMER sr, int add, int all);

	// Misc...
	void	(*send_disconnect)(STREAMER sr);
	void	(*send_top10)(STREAMER sr, char market, int type, int add);
	void	(*send_movers)(STREAMER sr, int on);
	void	(*send_info)(STREAMER sr, char *sym, int type);
	void	(*send_optchain)(STREAMER sr, char *sym);
	int	(*send_chart)(STREAMER sr, char *sym,
				int freq, int periods, int days);

	// News...
	void	(*send_headlines)(STREAMER sr, char *sym, int numlines);
	void	(*send_article)(STREAMER sr, char *artkey);
		// should add one if the streamer can/can't stream news. So
		// far, send_headlines implies this.

	// L2...
	int	(*send_l2)(STREAMER sr, char *sym, int add);

	// Incoming data...
	int	(*process)(STREAMER sr, int fdindex);

	//
	// Public data
	//
	int	refresh;	// Number of seconds between symbol refreshes
	int	nfd;
	int	fd[8];
	char	id[256];
	FILE	*readfile;
	FILE	*writefile;
	int	usenews;	// Copied from streamer prefs

	// Stats...
	int	cnt_opens;	// Number of streamer opens
	int	cnt_realopens;	// Number of streamer realopens
	int	cnt_rx;		// Count of bytes received
	time_t	time_start;	// Time when streamer was first selected
	time_t	time_open;	// Time when streamer was last opened
	time_t	time_realopen;	// Time when streamer was last realopen'ed

	STREAMERPRIV	priv;
} STREAMERPUB;

STREAMER	null_new(void);
STREAMER	advfn_new(void);
STREAMER	ameritrade_new(void);
STREAMER	freetrade_new(void);
STREAMER	datek_new(void);
STREAMER	esignal_new(void);
STREAMER	moneyam_new(void);
STREAMER	moneynet_new(void);
STREAMER	quotemedia_new(void);
STREAMER	schwab_new(void);
STREAMER	scottrader_new(void);
STREAMER	sonictrading_new(void);
STREAMER	swissquote_new(void);
STREAMER	yahoo_new(void);

FILE	*StreamerLog;

/*
 * Return entire list of known canonical symbols (kept in scottrader.c)
 */
int	index_list(char *buf, int size);

/*
 * Convert an extended canonical symbol to Yahoo format
 */
void	yahoo_canon2sym(char *out, char *in);
void	yahoo_sym2canon(char *out, char *in);

/*
 * Common routines used by many streamers
 */
void	streamer_free(STREAMER sr);
ssize_t	streamer_write_ascii(int fd, void *buf, size_t count);
ssize_t	streamer_write_binary(int fd, void *buf, size_t count);
int	streamer_printf(int fd, char *fmt, ...);
int	streamer_printf2(int fd, char *fmt, ...);
ssize_t streamer_read(STREAMER sr, int fdindex, void *buf, size_t count);
ssize_t streamer_mustread(STREAMER sr, int fdindex, void *buf, size_t count);

/*
 * Line buffer
 */
typedef struct
{
	int	fd;		// fd this buffer is associated with
	char	*buf;		// the buffer itself
	int	buflen;		// the buffer length
	char	*bufp;		// the current read position in the buffer
	char	*bufe;		// the end of the valid portion of the buffer

	int	cnt_rx;		// Statistic: total bytes read
	char	*debug_tag;	// Tag to prefix debug lines with
} LINEBUF;

void linebuf_init(LINEBUF *lb);
int linebuf_open(LINEBUF *lb, int fd, int buflen);
void linebuf_close(LINEBUF *lb);
int linebuf_avail(LINEBUF *lb);
int linebuf_gets(LINEBUF *lb, char *buf, int buflen);
void linebuf_tag(LINEBUF *lb, char *tag);