Write bridge 1/2
This commit is contained in:
parent
7eab91cae8
commit
c3f99c35a9
3 changed files with 55 additions and 4 deletions
|
@ -368,3 +368,15 @@ struct evt_core_fdinfo* evt_core_get_first_from_cat(struct evt_core_ctx* ctx, ch
|
|||
void evt_core_free_app_ctx_simple(void* v) {
|
||||
free(v);
|
||||
}
|
||||
|
||||
struct evt_core_fdinfo* evt_core_dup(struct evt_core_ctx *ctx, struct evt_core_fdinfo *fdinfo, char *newurl) {
|
||||
struct evt_core_fdinfo newfdinfo;
|
||||
struct evt_core_cat newcat;
|
||||
newfdinfo.cat = &newcat;
|
||||
|
||||
newfdinfo.cat->name = fdinfo->cat->name;
|
||||
newfdinfo.fd = dup(fdinfo->fd);
|
||||
newfdinfo.url = strdup(newurl);
|
||||
|
||||
return evt_core_add_fd (ctx, &newfdinfo);
|
||||
}
|
||||
|
|
|
@ -55,6 +55,7 @@ void evt_core_init(struct evt_core_ctx* ctx, uint8_t verbose);
|
|||
void evt_core_add_cat(struct evt_core_ctx* ctx, struct evt_core_cat* cat);
|
||||
void evt_core_mv_fd(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct evt_core_cat* to_cat);
|
||||
void evt_core_mv_fd2(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, char* to_cat);
|
||||
struct evt_core_fdinfo* evt_core_dup(struct evt_core_ctx *ctx, struct evt_core_fdinfo *fdinfo, char* new_url);
|
||||
struct evt_core_fdinfo* evt_core_add_fd(struct evt_core_ctx* ctx, struct evt_core_fdinfo* user_data);
|
||||
struct evt_core_cat* evt_core_rm_fd(struct evt_core_ctx* ctx, int fd);
|
||||
void evt_core_free(struct evt_core_ctx* ctx);
|
||||
|
|
|
@ -50,23 +50,61 @@ co_error:
|
|||
|
||||
int faketor_socks5_server_success(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo) {
|
||||
printf("success socks5!\n");
|
||||
return EVT_CORE_FD_EXHAUSTED;
|
||||
}
|
||||
// ctos-read and stoc-write
|
||||
char buffer[512];
|
||||
sprintf(buffer, "%s:write", fdinfo->url);
|
||||
struct evt_core_fdinfo *fdinfo2 = evt_core_dup(ctx, fdinfo, buffer);
|
||||
evt_core_mv_fd2(ctx, fdinfo, "ctos-read");
|
||||
evt_core_mv_fd2(ctx, fdinfo2, "stoc-write");
|
||||
|
||||
int faketor_socks5_server_failed(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo) {
|
||||
printf("failure socks5!\n");
|
||||
return EVT_CORE_FD_EXHAUSTED;
|
||||
}
|
||||
|
||||
int faketor_torctl_server_success(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo) {
|
||||
printf("success torctl!\n");
|
||||
// ctos-write and stoc-read
|
||||
char buffer[512];
|
||||
sprintf(buffer, "%s:write", fdinfo->url);
|
||||
struct evt_core_fdinfo *fdinfo2 = evt_core_dup(ctx, fdinfo, buffer);
|
||||
evt_core_mv_fd2(ctx, fdinfo, "stoc-read");
|
||||
evt_core_mv_fd2(ctx, fdinfo2, "ctos-write");
|
||||
return EVT_CORE_FD_EXHAUSTED;
|
||||
}
|
||||
|
||||
int faketor_socks5_server_failed(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo) {
|
||||
printf("failure socks5!\n");
|
||||
evt_core_rm_fd(ctx, fdinfo->fd);
|
||||
|
||||
return EVT_CORE_FD_EXHAUSTED;
|
||||
}
|
||||
|
||||
int faketor_ctos(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo) {
|
||||
char buffer[1600];
|
||||
ssize_t nread, nwrite;
|
||||
size_t skip = strlen("socket:");
|
||||
char url[512];
|
||||
|
||||
// 1. read some data
|
||||
nread = recv(fdinfo->fd, buffer, sizeof(buffer), MSG_PEEK);
|
||||
if (nread == -1 && errno == EAGAIN) return EVT_CORE_FD_EXHAUSTED;
|
||||
if (nread == -1) goto error;
|
||||
|
||||
// 2. find target
|
||||
sprintf(url, "torctl:%s:write", fdinfo->url + skip);
|
||||
printf("source url: %s, target url: %s", fdinfo->url, url);
|
||||
struct evt_core_fdinfo *target = evt_core_get_from_url (ctx, url);
|
||||
|
||||
// 3. write to target
|
||||
nwrite = send(fdinfo->fd, buffer, nread, 0);
|
||||
if (nwrite == -1 && errno == EAGAIN) return EVT_CORE_FD_EXHAUSTED;
|
||||
if (nwrite == -1) goto error;
|
||||
nread = recv(fdinfo->fd, buffer, nwrite, 0);
|
||||
if (nread == -1) goto error;
|
||||
|
||||
return EVT_CORE_FD_UNFINISHED;
|
||||
error:
|
||||
perror("oopsie ctos");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
int faketor_stoc(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo) {
|
||||
|
|
Loading…
Reference in a new issue