Dependents:   oldheating gps motorhome heating

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?

UserRevisionLine numberNew 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 }