Contiki-NG
websocket-http-client.h
1/*
2 * Copyright (c) 2014, Thingsquare, http://www.thingsquare.com/.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of the copyright holder nor the names of its
14 * contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28 * OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
30 */
31#ifndef WEBSOCKET_HTTP_CLIENT_H_
32#define WEBSOCKET_HTTP_CLIENT_H_
33
34#include "contiki.h"
35#include "tcp-socket.h"
36
37#ifdef WEBSOCKET_HTTP_CLIENT_CONF_INPUTBUFSIZE
38#define WEBSOCKET_HTTP_CLIENT_INPUTBUFSIZE WEBSOCKET_HTTP_CLIENT_CONF_INPUTBUFSIZE
39#else /* WEBSOCKET_HTTP_CLIENT_CONF_INPUTBUFSIZE */
40#define WEBSOCKET_HTTP_CLIENT_INPUTBUFSIZE 100
41#endif /* WEBSOCKET_HTTP_CLIENT_CONF_INPUTBUFSIZE */
42
43#ifdef WEBSOCKET_HTTP_CLIENT_CONF_OUTPUTBUFSIZE
44#define WEBSOCKET_HTTP_CLIENT_OUTPUTBUFSIZE WEBSOCKET_HTTP_CLIENT_CONF_OUTPUTBUFSIZE
45#else /* WEBSOCKET_HTTP_CLIENT_CONF_OUTPUTBUFSIZE */
46#define WEBSOCKET_HTTP_CLIENT_OUTPUTBUFSIZE 300
47#endif /* WEBSOCKET_HTTP_CLIENT_CONF_OUTPUTBUFSIZE */
48
49#ifdef WEBSOCKET_HTTP_CLIENT_CONF_MAX_HOSTLEN
50#define WEBSOCKET_HTTP_CLIENT_MAX_HOSTLEN WEBSOCKET_HTTP_CLIENT_CONF_MAX_HOSTLEN
51#else /* WEBSOCKET_HTTP_CLIENT_CONF_MAX_HOSTLEN */
52#define WEBSOCKET_HTTP_CLIENT_MAX_HOSTLEN 32
53#endif /* WEBSOCKET_HTTP_CLIENT_CONF_MAX_HOSTLEN */
54
55#ifdef WEBSOCKET_HTTP_CLIENT_CONF_MAX_FILELEN
56#define WEBSOCKET_HTTP_CLIENT_MAX_FILELEN WEBSOCKET_HTTP_CLIENT_CONF_MAX_FILELEN
57#else /* WEBSOCKET_HTTP_CLIENT_CONF_MAX_FILELEN */
58#define WEBSOCKET_HTTP_CLIENT_MAX_FILELEN 32
59#endif /* WEBSOCKET_HTTP_CLIENT_CONF_MAX_FILELEN */
60
61#ifdef WEBSOCKET_HTTP_CLIENT_CONF_MAX_SUBPROTOCOLLEN
62#define WEBSOCKET_HTTP_CLIENT_MAX_SUBPROTOCOLLEN WEBSOCKET_HTTP_CLIENT_CONF_MAX_SUBPROTOCOLLEN
63#else /* WEBSOCKET_HTTP_CLIENT_CONF_MAX_SUBPROTOCOLLEN */
64#define WEBSOCKET_HTTP_CLIENT_MAX_SUBPROTOCOLLEN 24
65#endif /* WEBSOCKET_HTTP_CLIENT_CONF_MAX_SUBPROTOCOLLEN */
66
67#ifdef WEBSOCKET_HTTP_CLIENT_CONF_MAX_HEADERLEN
68#define WEBSOCKET_HTTP_CLIENT_MAX_HEADERLEN WEBSOCKET_HTTP_CLIENT_CONF_MAX_HEADERLEN
69#else /* WEBSOCKET_HTTP_CLIENT_CONF_MAX_HEADERLEN */
70#define WEBSOCKET_HTTP_CLIENT_MAX_HEADERLEN 128
71#endif /* WEBSOCKET_HTTP_CLIENT_CONF_MAX_HEADERLEN */
72
73struct websocket_http_client_state {
74 struct tcp_socket s;
75 uint8_t inputbuf[WEBSOCKET_HTTP_CLIENT_INPUTBUFSIZE];
76 uint8_t outputbuf[WEBSOCKET_HTTP_CLIENT_OUTPUTBUFSIZE];
77 char host[WEBSOCKET_HTTP_CLIENT_MAX_HOSTLEN];
78 char file[WEBSOCKET_HTTP_CLIENT_MAX_FILELEN];
79 char subprotocol[WEBSOCKET_HTTP_CLIENT_MAX_SUBPROTOCOLLEN];
80 char header[WEBSOCKET_HTTP_CLIENT_MAX_HEADERLEN];
81 uint16_t port;
82
83 int state;
84 struct pt parse_header_pt;
85 int http_status;
86 int i;
87
88 uip_ipaddr_t proxy_addr;
89 uint16_t proxy_port;
90};
91
92void websocket_http_client_init(struct websocket_http_client_state *s);
93void websocket_http_client_set_proxy(struct websocket_http_client_state *s,
94 const uip_ipaddr_t *addr, uint16_t port);
95
96int websocket_http_client_register(struct websocket_http_client_state *s,
97 const char *host,
98 uint16_t port,
99 const char *file,
100 const char *subprotocol,
101 const char *hdr);
102int websocket_http_client_get(struct websocket_http_client_state *s);
103int websocket_http_client_send(struct websocket_http_client_state *s,
104 const uint8_t *data,
105 uint16_t datalen);
106int websocket_http_client_sendbuflen(struct websocket_http_client_state *s);
107
108void websocket_http_client_close(struct websocket_http_client_state *s);
109
110const char *websocket_http_client_hostname(struct websocket_http_client_state *s);
111
112int websocket_http_client_queuelen(struct websocket_http_client_state *s);
113
114/* Callback functions that have to be implemented by the application
115 program. */
116void websocket_http_client_datahandler(struct websocket_http_client_state *s,
117 const uint8_t *data, uint16_t len);
118void websocket_http_client_connected(struct websocket_http_client_state *s);
119void websocket_http_client_timedout(struct websocket_http_client_state *s);
120void websocket_http_client_aborted(struct websocket_http_client_state *s);
121void websocket_http_client_closed(struct websocket_http_client_state *s);
122
123#endif /* WEBSOCKET_HTTP_CLIENT_H_ */
static uip_ds6_addr_t * addr
Pointer to a nbr cache entry.
Definition: uip-nd6.c:107