A stack which works with or without an Mbed os library. Provides IPv4 or IPv6 with a full 1500 byte buffer.
Dependents: oldheating gps motorhome heating
tcp/http/http.c@98:b977424ec7f7, 2019-01-03 (annotated)
- Committer:
- andrewboyson
- Date:
- Thu Jan 03 17:23:38 2019 +0000
- Revision:
- 98:b977424ec7f7
- Parent:
- 79:f50e02fb5c94
- Child:
- 108:66f17386ffd4
Added more fault positions and removed need for a net server module. Added need for the ethernet jack leds definition.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
andrewboyson | 61:aad055f1b0d1 | 1 | #include <stdbool.h> |
andrewboyson | 61:aad055f1b0d1 | 2 | |
andrewboyson | 54:84ef2b29cf7e | 3 | #include "http.h" |
andrewboyson | 54:84ef2b29cf7e | 4 | #include "tcpbuf.h" |
andrewboyson | 54:84ef2b29cf7e | 5 | #include "action.h" |
andrewboyson | 54:84ef2b29cf7e | 6 | #include "net.h" |
andrewboyson | 54:84ef2b29cf7e | 7 | #include "log.h" |
andrewboyson | 75:603b10404183 | 8 | #include "led.h" |
andrewboyson | 98:b977424ec7f7 | 9 | #include "fault.h" |
andrewboyson | 54:84ef2b29cf7e | 10 | |
andrewboyson | 54:84ef2b29cf7e | 11 | bool HttpTrace = false; |
andrewboyson | 54:84ef2b29cf7e | 12 | |
andrewboyson | 54:84ef2b29cf7e | 13 | void (*HttpReplyFunction )(int todo); //Plumb into this from your html server |
andrewboyson | 54:84ef2b29cf7e | 14 | int (*HttpRequestFunction)(char *pPath, char *pLastModified, char *pQuery); //Plumb into this from your html server |
andrewboyson | 54:84ef2b29cf7e | 15 | |
andrewboyson | 79:f50e02fb5c94 | 16 | void HttpHandleRequest(int size, char* pRequestStream, uint32_t positionInRequestStream, int* pToDo) |
andrewboyson | 54:84ef2b29cf7e | 17 | { |
andrewboyson | 98:b977424ec7f7 | 18 | int lastFaultPoint = FaultPoint; |
andrewboyson | 98:b977424ec7f7 | 19 | FaultPoint = FAULT_POINT_HttpHandleRequest; |
andrewboyson | 98:b977424ec7f7 | 20 | |
andrewboyson | 54:84ef2b29cf7e | 21 | if (HttpTrace) |
andrewboyson | 54:84ef2b29cf7e | 22 | { |
andrewboyson | 79:f50e02fb5c94 | 23 | LogF("HTTP <<< %d (%u)\r\n", size, positionInRequestStream); |
andrewboyson | 54:84ef2b29cf7e | 24 | } |
andrewboyson | 54:84ef2b29cf7e | 25 | //Handle request for the first packet of data received but leave todo the same after that. |
andrewboyson | 75:603b10404183 | 26 | if (size && positionInRequestStream == 0) |
andrewboyson | 54:84ef2b29cf7e | 27 | { |
andrewboyson | 54:84ef2b29cf7e | 28 | char* pMethod; |
andrewboyson | 54:84ef2b29cf7e | 29 | char* pPath; |
andrewboyson | 54:84ef2b29cf7e | 30 | char* pQuery; |
andrewboyson | 54:84ef2b29cf7e | 31 | char* pLastModified; |
andrewboyson | 73:43e3d7fb3d60 | 32 | HttpReadRequest(pRequestStream, size, &pMethod, &pPath, &pQuery, &pLastModified); |
andrewboyson | 54:84ef2b29cf7e | 33 | *pToDo = HttpRequestFunction(pPath, pLastModified, pQuery); |
andrewboyson | 54:84ef2b29cf7e | 34 | } |
andrewboyson | 98:b977424ec7f7 | 35 | FaultPoint = lastFaultPoint; |
andrewboyson | 71:736a5747ade1 | 36 | } |
andrewboyson | 79:f50e02fb5c94 | 37 | void HttpSendReply(int* pSize, char* pReplyStream, uint32_t positionInReplyStream, uint16_t mss, int todo) |
andrewboyson | 71:736a5747ade1 | 38 | { |
andrewboyson | 54:84ef2b29cf7e | 39 | TcpBufStart(positionInReplyStream, mss, pReplyStream); |
andrewboyson | 71:736a5747ade1 | 40 | HttpReplyFunction(todo); |
andrewboyson | 54:84ef2b29cf7e | 41 | *pSize = TcpBufLength(); |
andrewboyson | 55:e64b8b47a2b6 | 42 | |
andrewboyson | 55:e64b8b47a2b6 | 43 | if (HttpTrace) |
andrewboyson | 55:e64b8b47a2b6 | 44 | { |
andrewboyson | 55:e64b8b47a2b6 | 45 | LogF("HTTP >>> %d (%d)\r\n", *pSize, positionInReplyStream); |
andrewboyson | 55:e64b8b47a2b6 | 46 | } |
andrewboyson | 71:736a5747ade1 | 47 | } |