parent
c9a7b26945
commit
00dd31f884
@ -0,0 +1,104 @@
|
|||||||
|
--- a/scenario.cpp
|
||||||
|
+++ b/scenario.cpp
|
||||||
|
@@ -808,11 +808,13 @@
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /*
|
||||||
|
if((msg[strlen(msg) - 1] != '\n') && (removed_clrf)) {
|
||||||
|
strcat(msg, "\n");
|
||||||
|
}
|
||||||
|
char *tsrc = msg;
|
||||||
|
while(*tsrc++);
|
||||||
|
+ */
|
||||||
|
curmsg -> send_scheme = new SendingMessage(this, msg);
|
||||||
|
free(msg);
|
||||||
|
|
||||||
|
--- a/call.hpp
|
||||||
|
+++ b/call.hpp
|
||||||
|
@@ -64,6 +64,17 @@
|
||||||
|
int ackIndex;
|
||||||
|
};
|
||||||
|
|
||||||
|
+struct fileData {
|
||||||
|
+ char * name;
|
||||||
|
+ char * data;
|
||||||
|
+ size_t size;
|
||||||
|
+ ~fileData()
|
||||||
|
+ {
|
||||||
|
+ delete[] name;
|
||||||
|
+ delete[] data;
|
||||||
|
+ }
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
class call : virtual public task, virtual public listener, public virtual socketowner {
|
||||||
|
public:
|
||||||
|
/* These are wrappers for various circumstances, (private) init does the real work. */
|
||||||
|
@@ -312,6 +323,8 @@
|
||||||
|
void queue_up(char *msg);
|
||||||
|
char *queued_msg;
|
||||||
|
|
||||||
|
+ const fileData * readFile(char * filename);
|
||||||
|
+
|
||||||
|
|
||||||
|
#ifdef _USE_OPENSSL
|
||||||
|
SSL_CTX *m_ctx_ssl ;
|
||||||
|
--- a/call.cpp
|
||||||
|
+++ b/call.cpp
|
||||||
|
@@ -2351,19 +2351,18 @@
|
||||||
|
case E_Message_File: {
|
||||||
|
char buffer[MAX_HEADER_LEN];
|
||||||
|
createSendingMessage(comp->comp_param.filename, -2, buffer, sizeof(buffer));
|
||||||
|
- FILE *f = fopen(buffer, "r");
|
||||||
|
- if (!f) {
|
||||||
|
- ERROR("Could not open '%s': %s\n", buffer, strerror(errno));
|
||||||
|
- }
|
||||||
|
- int ret;
|
||||||
|
- while ((ret = fread(dest, 1, left, f)) > 0) {
|
||||||
|
- left -= ret;
|
||||||
|
- dest += ret;
|
||||||
|
- }
|
||||||
|
- if (ret < 0) {
|
||||||
|
- ERROR("Error reading '%s': %s\n", buffer, strerror(errno));
|
||||||
|
+ const fileData * file = readFile(buffer);
|
||||||
|
+ if (file->size > 0) {
|
||||||
|
+ if (*dest == '\0') { // remove all trailing spaces at the end of headers
|
||||||
|
+ dest--;
|
||||||
|
+ while (*dest == '\x20')
|
||||||
|
+ dest--;
|
||||||
|
+ dest++;
|
||||||
|
+ }
|
||||||
|
+ memcpy(dest, file->data, file->size); // append file data at the end
|
||||||
|
+ dest += file->size;
|
||||||
|
}
|
||||||
|
- fclose(f);
|
||||||
|
+ delete file;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case E_Message_Injection: {
|
||||||
|
@@ -4114,3 +4113,25 @@
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
+
|
||||||
|
+const fileData * call::readFile(char * filename)
|
||||||
|
+{
|
||||||
|
+ fileData * file = new fileData;
|
||||||
|
+ file->name = strdup(filename);
|
||||||
|
+ FILE * fd = fopen(filename, "rb");
|
||||||
|
+ fseek(fd, 0, SEEK_END);
|
||||||
|
+ file->size = ftell(fd);
|
||||||
|
+ fseek(fd, 0, SEEK_SET);
|
||||||
|
+ if (fd) {
|
||||||
|
+ file->data = new char[file->size];
|
||||||
|
+ size_t bread = fread(file->data, 1, file->size, fd);
|
||||||
|
+ if (bread != file->size) {
|
||||||
|
+ ERROR("File %s was not read properly read %d fsize %d",
|
||||||
|
+ filename, bread, file->size);
|
||||||
|
+ }
|
||||||
|
+ fclose(fd);
|
||||||
|
+ } else {
|
||||||
|
+ ERROR("Unable to open data file %s %s", filename, strerror(errno));
|
||||||
|
+ }
|
||||||
|
+ return file;
|
||||||
|
+}
|
Loading…
Reference in new issue