RbootHttpUpdater.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * RbootHttpUpdater.h
8  *
9  * Created on: 2015/09/03.
10  * Author: Richard A Burton & Anakod
11  *
12  * Modified: 2017 - Slavey Karadzhov <slav@attachix.com>
13  *
14  ****/
15 
16 #pragma once
17 
18 #include <Network/HttpClient.h>
19 #include "../Data/Stream/RbootOutputStream.h"
20 
21 #define NO_ROM_SWITCH 0xff
22 
24 
26 
29  uint32_t targetOffset;
30  size_t size; // << max allowed size
31  RbootOutputStream* stream = nullptr; // (optional) output stream to use.
32 };
33 
34 class RbootHttpUpdater : protected HttpClient
35 {
36 public:
38  {
39  cleanup();
40  }
41 
42  bool addItem(int offset, const String& firmwareFileUrl, size_t maxSize = 0);
43  bool addItem(const String& firmwareFileUrl, RbootOutputStream* stream = nullptr);
44 
45  void start();
46 
47  void switchToRom(uint8_t romSlot)
48  {
49  this->romSlot = romSlot;
50  }
51 
52  void setCallback(OtaUpdateDelegate reqUpdateDelegate)
53  {
54  setDelegate(reqUpdateDelegate);
55  }
56 
57  void setDelegate(OtaUpdateDelegate reqUpdateDelegate)
58  {
59  this->updateDelegate = reqUpdateDelegate;
60  }
61 
62  /* Sets the base request that can be used to pass
63  * - default request parameters, like request headers...
64  * - default SSL options
65  * - default SSL fingeprints
66  * - default SSL client certificates
67  *
68  * @param request
69  */
70  void setBaseRequest(HttpRequest* request)
71  {
72  baseRequest = request;
73  }
74 
75  // Allow reading items
76  RbootHttpUpdaterItem getItem(unsigned int index)
77  {
78  return items.elementAt(index);
79  }
80 
81 protected:
82  void applyUpdate();
83  void updateFailed();
84 
85  virtual int itemComplete(HttpConnection& client, bool success);
86  virtual int updateComplete(HttpConnection& client, bool success);
87 
88 protected:
90  int currentItem = 0;
92  uint8_t romSlot = NO_ROM_SWITCH;
93  OtaUpdateDelegate updateDelegate = nullptr;
94 
95  HttpRequest* baseRequest = nullptr;
96 
97 private:
98  void cleanup()
99  {
100  for(unsigned i = 0; i < items.count(); i++) {
101  delete items[i].stream;
102  items[i].stream = nullptr;
103  }
104  items.clear();
105  }
106 };
107 
Delegate< void(RbootHttpUpdater &client, bool result)> OtaUpdateDelegate
Definition: RbootHttpUpdater.h:23
Definition: RbootHttpUpdater.h:27
void setDelegate(OtaUpdateDelegate reqUpdateDelegate)
Definition: RbootHttpUpdater.h:57
RbootHttpUpdaterItem getItem(unsigned int index)
Definition: RbootHttpUpdater.h:76
RbootOutputStream * stream
Definition: RbootHttpUpdater.h:31
Definition: HttpClient.h:26
virtual ~RbootHttpUpdater()
Definition: RbootHttpUpdater.h:37
The String class.
Definition: WString.h:136
String url
Definition: RbootHttpUpdater.h:28
unsigned int count() const override
Definition: WVector.h:47
void switchToRom(uint8_t romSlot)
Definition: RbootHttpUpdater.h:47
#define SMING_DEPRECATED
Definition: sming_attr.h:30
void setCallback(OtaUpdateDelegate reqUpdateDelegate)
Definition: RbootHttpUpdater.h:52
uint32_t targetOffset
Definition: RbootHttpUpdater.h:29
void setBaseRequest(HttpRequest *request)
Definition: RbootHttpUpdater.h:70
Structure defining flash write status.
Definition: rboot-api.h:26
size_t size
Definition: RbootHttpUpdater.h:30
void clear()
Definition: WVector.h:59
Definition: RbootOutputStream.h:21
Definition: HttpRequest.h:35
Provides http base used for client and server connections.
Definition: HttpConnection.h:27
Definition: RbootHttpUpdater.h:34
rboot_write_status rbootWriteStatus
Definition: RbootHttpUpdater.h:91
Vector< RbootHttpUpdaterItem > items
Definition: RbootHttpUpdater.h:89
#define NO_ROM_SWITCH
Definition: RbootHttpUpdater.h:21