summaryrefslogtreecommitdiff
path: root/other/sslmim/forward.cc
diff options
context:
space:
mode:
authorRoot THC2026-02-24 12:42:47 +0000
committerRoot THC2026-02-24 12:42:47 +0000
commitc9cbeced5b3f2bdd7407e29c0811e65954132540 (patch)
treeaefc355416b561111819de159ccbd86c3004cf88 /other/sslmim/forward.cc
parent073fe4bf9fca6bf40cef2886d75df832ef4b6fca (diff)
initial
Diffstat (limited to 'other/sslmim/forward.cc')
-rw-r--r--other/sslmim/forward.cc108
1 files changed, 108 insertions, 0 deletions
diff --git a/other/sslmim/forward.cc b/other/sslmim/forward.cc
new file mode 100644
index 0000000..b4ff429
--- /dev/null
+++ b/other/sslmim/forward.cc
@@ -0,0 +1,108 @@
1/*
2 * Copyright (C) 2001 Sebastian Krahmer.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by Sebastian Krahmer.
16 * 4. The name Sebastian Krahmer may not be used to endorse or promote
17 * products derived from this software without specific prior written
18 * permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
21 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE
24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
31 */
32#include "misc.h"
33#include "session.h"
34#include "forward.h"
35
36#include <stdio.h>
37#include <fcntl.h>
38#include <sys/time.h>
39#include <sys/types.h>
40#include <unistd.h>
41#include <errno.h>
42#include <time.h>
43#include <openssl/err.h>
44
45#define SSL_LOG "./mim"
46
47using namespace NS_Misc;
48
49int ssl_forward(CSession *client, SSession *server)
50{
51 size_t r;
52 fd_set rset;
53 char buf[1500];
54 int max;
55 char cfile[1024], sfile[1024];
56
57 sprintf(cfile, "%s.%ld.%d.client", SSL_LOG, time(NULL), getpid());
58 sprintf(sfile, "%s.%ld.%d.server", SSL_LOG, time(NULL), getpid());
59
60 int cfd = open(cfile, O_WRONLY|O_CREAT|O_APPEND, 0600);
61 int sfd = open(sfile, O_WRONLY|O_CREAT|O_APPEND, 0600);
62
63 if (cfd < 0 || sfd < 0) {
64 log("ssl_forward::open() returned error");
65 die(NULL);
66 }
67
68 // I know that there exists problems with SSL+select
69 // ...
70 for (;;) {
71 FD_ZERO(&rset);
72 FD_SET(client->fileno(), &rset);
73 FD_SET(server->fileno(), &rset);
74
75 max = (client->fileno() > server->fileno() ?
76 client->fileno() : server->fileno());
77
78 if (select(max + 1, &rset, NULL, NULL, NULL) < 0) {
79 if (errno == EINTR)
80 continue;
81 else {
82 log("ssl_forward::select");
83 die(NULL);
84 }
85 }
86 if (FD_ISSET(client->fileno(), &rset)) {
87 r = client->read(buf, sizeof(buf));
88 if (r <= 0)
89 break;
90 write(cfd, buf, r);
91 if (server->write(buf, r) <= 0)
92 break;
93 }
94 if (FD_ISSET(server->fileno(), &rset)) {
95 r = server->read(buf, sizeof(buf));
96 if (r <= 0)
97 break;
98 write(sfd, buf, r);
99 if (client->write(buf, r) <= 0)
100 break;
101 }
102 }
103 close(cfd);
104 close(sfd);
105 return 0; // upon return here, caller
106 // will shutdown connections
107}
108