Dependents: oldheating gps motorhome heating
tcp/https/https.c@144:6bd5c54efc7d, 2019-05-12 (annotated)
- Committer:
- andrewboyson
- Date:
- Sun May 12 17:17:49 2019 +0000
- Revision:
- 144:6bd5c54efc7d
- Parent:
- 142:a8c0890a58d1
Tidied up tcp.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
andrewboyson | 111:3600389d1add | 1 | #include <stdbool.h> |
andrewboyson | 111:3600389d1add | 2 | |
andrewboyson | 111:3600389d1add | 3 | #include "http.h" |
andrewboyson | 111:3600389d1add | 4 | #include "tcpbuf.h" |
andrewboyson | 111:3600389d1add | 5 | #include "action.h" |
andrewboyson | 111:3600389d1add | 6 | #include "net.h" |
andrewboyson | 111:3600389d1add | 7 | #include "log.h" |
andrewboyson | 111:3600389d1add | 8 | #include "led.h" |
andrewboyson | 144:6bd5c54efc7d | 9 | #include "restart.h" |
andrewboyson | 144:6bd5c54efc7d | 10 | #include "mstimer.h" |
andrewboyson | 111:3600389d1add | 11 | |
andrewboyson | 111:3600389d1add | 12 | #define TLS_CONTENT_TYPE_ChangeCipher 20 |
andrewboyson | 111:3600389d1add | 13 | #define TLS_CONTENT_TYPE_Alert 21 |
andrewboyson | 111:3600389d1add | 14 | #define TLS_CONTENT_TYPE_Handshake 22 |
andrewboyson | 111:3600389d1add | 15 | #define TLS_CONTENT_TYPE_Application 23 |
andrewboyson | 111:3600389d1add | 16 | #define TLS_CONTENT_TYPE_Heartbeat 24 |
andrewboyson | 111:3600389d1add | 17 | |
andrewboyson | 111:3600389d1add | 18 | #define TLS_HANDSHAKE_HelloRequest 0 |
andrewboyson | 111:3600389d1add | 19 | #define TLS_HANDSHAKE_ClientHello 1 |
andrewboyson | 111:3600389d1add | 20 | #define TLS_HANDSHAKE_ServerHello 2 |
andrewboyson | 111:3600389d1add | 21 | #define TLS_HANDSHAKE_NewSessionTicket 4 |
andrewboyson | 111:3600389d1add | 22 | #define TLS_HANDSHAKE_EncryptedExtensions 8 |
andrewboyson | 111:3600389d1add | 23 | #define TLS_HANDSHAKE_Certificate 11 |
andrewboyson | 111:3600389d1add | 24 | #define TLS_HANDSHAKE_ServerKeyExchange 12 |
andrewboyson | 111:3600389d1add | 25 | #define TLS_HANDSHAKE_CertificateRequest 13 |
andrewboyson | 111:3600389d1add | 26 | #define TLS_HANDSHAKE_ServerHelloDone 14 |
andrewboyson | 111:3600389d1add | 27 | #define TLS_HANDSHAKE_CertificateVerify 15 |
andrewboyson | 111:3600389d1add | 28 | #define TLS_HANDSHAKE_ClientKeyExchange 16 |
andrewboyson | 111:3600389d1add | 29 | #define TLS_HANDSHAKE_Finished 20 |
andrewboyson | 111:3600389d1add | 30 | |
andrewboyson | 111:3600389d1add | 31 | #define DO_SERVER_HELLO 100 |
andrewboyson | 111:3600389d1add | 32 | |
andrewboyson | 144:6bd5c54efc7d | 33 | /*static void logHandshakeType(char handshakeType) |
andrewboyson | 111:3600389d1add | 34 | { |
andrewboyson | 111:3600389d1add | 35 | switch (handshakeType) |
andrewboyson | 111:3600389d1add | 36 | { |
andrewboyson | 111:3600389d1add | 37 | case TLS_HANDSHAKE_HelloRequest: Log ("Hello request"); break; |
andrewboyson | 111:3600389d1add | 38 | case TLS_HANDSHAKE_ClientHello: Log ("Client hello"); break; |
andrewboyson | 111:3600389d1add | 39 | case TLS_HANDSHAKE_ServerHello: Log ("Server hello"); break; |
andrewboyson | 111:3600389d1add | 40 | case TLS_HANDSHAKE_NewSessionTicket: Log ("New session ticket"); break; |
andrewboyson | 111:3600389d1add | 41 | case TLS_HANDSHAKE_EncryptedExtensions: Log ("Encrypted extensions"); break; |
andrewboyson | 111:3600389d1add | 42 | case TLS_HANDSHAKE_Certificate: Log ("Certificate"); break; |
andrewboyson | 111:3600389d1add | 43 | case TLS_HANDSHAKE_ServerKeyExchange: Log ("Server key exchange"); break; |
andrewboyson | 111:3600389d1add | 44 | case TLS_HANDSHAKE_CertificateRequest: Log ("Certificate request"); break; |
andrewboyson | 111:3600389d1add | 45 | case TLS_HANDSHAKE_ServerHelloDone: Log ("Server hello done"); break; |
andrewboyson | 111:3600389d1add | 46 | case TLS_HANDSHAKE_CertificateVerify: Log ("Certificate verify"); break; |
andrewboyson | 111:3600389d1add | 47 | case TLS_HANDSHAKE_ClientKeyExchange: Log ("Client key exchange"); break; |
andrewboyson | 111:3600389d1add | 48 | case TLS_HANDSHAKE_Finished: Log ("Finished"); break; |
andrewboyson | 111:3600389d1add | 49 | default: LogF("%02hX", handshakeType); break; |
andrewboyson | 111:3600389d1add | 50 | } |
andrewboyson | 111:3600389d1add | 51 | } |
andrewboyson | 111:3600389d1add | 52 | static void logContentType(char contentType) |
andrewboyson | 111:3600389d1add | 53 | { |
andrewboyson | 111:3600389d1add | 54 | switch (contentType) |
andrewboyson | 111:3600389d1add | 55 | { |
andrewboyson | 111:3600389d1add | 56 | case TLS_CONTENT_TYPE_ChangeCipher: Log ("Change cipher"); break; |
andrewboyson | 111:3600389d1add | 57 | case TLS_CONTENT_TYPE_Alert: Log ("Alert"); break; |
andrewboyson | 111:3600389d1add | 58 | case TLS_CONTENT_TYPE_Handshake: Log ("Handshake"); break; |
andrewboyson | 111:3600389d1add | 59 | case TLS_CONTENT_TYPE_Application: Log ("Application"); break; |
andrewboyson | 111:3600389d1add | 60 | case TLS_CONTENT_TYPE_Heartbeat: Log ("Heartbeat"); break; |
andrewboyson | 111:3600389d1add | 61 | default: LogF("%02hX", contentType); break; |
andrewboyson | 111:3600389d1add | 62 | } |
andrewboyson | 111:3600389d1add | 63 | } |
andrewboyson | 144:6bd5c54efc7d | 64 | */ |
andrewboyson | 111:3600389d1add | 65 | bool HttpsTrace = true; |
andrewboyson | 111:3600389d1add | 66 | |
andrewboyson | 144:6bd5c54efc7d | 67 | void HttpsHandleRequest(int size, char* pRequestStream, uint32_t positionInRequestStream, void* pData) |
andrewboyson | 111:3600389d1add | 68 | { |
andrewboyson | 144:6bd5c54efc7d | 69 | /* |
andrewboyson | 111:3600389d1add | 70 | if (HttpsTrace) |
andrewboyson | 111:3600389d1add | 71 | { |
andrewboyson | 111:3600389d1add | 72 | LogF("HTTPS <<< %d (%u)\r\n", size, positionInRequestStream); |
andrewboyson | 111:3600389d1add | 73 | } |
andrewboyson | 111:3600389d1add | 74 | //Handle request for the first packet of data received but leave todo the same after that. |
andrewboyson | 111:3600389d1add | 75 | if (size == 0) return; |
andrewboyson | 111:3600389d1add | 76 | if (positionInRequestStream != 0) return; |
andrewboyson | 111:3600389d1add | 77 | char contentType = pRequestStream[0]; |
andrewboyson | 111:3600389d1add | 78 | if (HttpsTrace) Log(" content type: "); logContentType(contentType); Log("\r\n"); |
andrewboyson | 111:3600389d1add | 79 | switch (contentType) |
andrewboyson | 111:3600389d1add | 80 | { |
andrewboyson | 111:3600389d1add | 81 | case TLS_CONTENT_TYPE_Handshake: |
andrewboyson | 111:3600389d1add | 82 | { |
andrewboyson | 111:3600389d1add | 83 | char handshakeType = pRequestStream[5]; |
andrewboyson | 111:3600389d1add | 84 | if (HttpsTrace) Log(" handshake type: "); logHandshakeType(handshakeType); Log("\r\n"); |
andrewboyson | 111:3600389d1add | 85 | *pToDo = DO_SERVER_HELLO; |
andrewboyson | 111:3600389d1add | 86 | return; |
andrewboyson | 111:3600389d1add | 87 | } |
andrewboyson | 111:3600389d1add | 88 | default: |
andrewboyson | 111:3600389d1add | 89 | Log("HTTPS - ignoring untreated content type\r\n"); |
andrewboyson | 111:3600389d1add | 90 | *pToDo = 0; |
andrewboyson | 111:3600389d1add | 91 | return; |
andrewboyson | 111:3600389d1add | 92 | } |
andrewboyson | 111:3600389d1add | 93 | //ECDHE-RSA-AES128-GCM-SHA256 |
andrewboyson | 144:6bd5c54efc7d | 94 | */ |
andrewboyson | 111:3600389d1add | 95 | } |
andrewboyson | 144:6bd5c54efc7d | 96 | /*static void sendServerHello() |
andrewboyson | 111:3600389d1add | 97 | { |
andrewboyson | 111:3600389d1add | 98 | Log(" sending server hello\r\n"); |
andrewboyson | 111:3600389d1add | 99 | } |
andrewboyson | 144:6bd5c54efc7d | 100 | */ |
andrewboyson | 144:6bd5c54efc7d | 101 | bool HttpsSendReply(int* pSize, char* pReplyStream, uint32_t positionInReplyStream, uint16_t mss, void* pData) |
andrewboyson | 111:3600389d1add | 102 | { |
andrewboyson | 144:6bd5c54efc7d | 103 | /* |
andrewboyson | 111:3600389d1add | 104 | TcpBufStart(positionInReplyStream, mss, pReplyStream); |
andrewboyson | 111:3600389d1add | 105 | if (todo == DO_SERVER_HELLO) sendServerHello(); |
andrewboyson | 111:3600389d1add | 106 | *pSize = TcpBufLength(); |
andrewboyson | 111:3600389d1add | 107 | |
andrewboyson | 111:3600389d1add | 108 | if (HttpsTrace) |
andrewboyson | 111:3600389d1add | 109 | { |
andrewboyson | 111:3600389d1add | 110 | LogF("HTTPS >>> %d (%d)\r\n", *pSize, positionInReplyStream); |
andrewboyson | 111:3600389d1add | 111 | } |
andrewboyson | 144:6bd5c54efc7d | 112 | */ |
andrewboyson | 144:6bd5c54efc7d | 113 | return TCP_APP_FINISHED; //0: not started; +1: started; -1: finished |
andrewboyson | 111:3600389d1add | 114 | } |