Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Mike Perry
Tor
Commits
74787aa2
Commit
74787aa2
authored
Oct 03, 2002
by
Roger Dingledine
Browse files
cell.c is now obsolete
svn:r133
parent
bf53852a
Changes
4
Hide whitespace changes
Inline
Side-by-side
src/or/Makefile.am
View file @
74787aa2
...
...
@@ -7,7 +7,7 @@ bin_PROGRAMS = or
or_LDADD
=
-L
../common
-lor
or_SOURCES
=
buffers.c
cell.c
circuit.c command.c connection.c
\
or_SOURCES
=
buffers.c circuit.c command.c connection.c
\
connection_exit.c connection_ap.c connection_op.c connection_or.c config.c
\
main.c onion.c routers.c directory.c
...
...
src/or/cell.c
deleted
100644 → 0
View file @
bf53852a
/* Copyright 2001,2002 Roger Dingledine, Matej Pfajfar. */
/* See LICENSE for licensing information */
/* $Id$ */
#include
"or.h"
static
cell_t
*
new_create_cell
(
uint16_t
aci
,
unsigned
char
length
,
unsigned
char
*
buf
)
{
cell_t
*
c
=
NULL
;
int
retval
;
if
((
aci
)
&&
(
buf
)
&&
(
length
<=
CELL_PAYLOAD_SIZE
))
/* valid parameters */
{
c
=
(
cell_t
*
)
malloc
(
sizeof
(
cell_t
));
if
(
!
c
)
/* malloc() error */
return
NULL
;
c
->
command
=
CELL_CREATE
;
c
->
aci
=
aci
;
c
->
length
=
length
;
c
->
seq
=
0
;
memcpy
((
void
*
)
c
->
payload
,
(
void
*
)
buf
,
length
);
retval
=
crypto_pseudo_rand
(
CELL_PAYLOAD_SIZE
-
length
,
(
unsigned
char
*
)(
c
->
payload
+
length
));
if
(
retval
)
/* RAND_pseudo_bytes() error */
{
free
((
void
*
)
c
);
return
NULL
;
}
/* RAND_pseudo_bytes() error */
return
c
;
}
/* valid parameters */
else
/* invalid parameters */
return
NULL
;
}
int
pack_create
(
uint16_t
aci
,
unsigned
char
*
onion
,
uint32_t
onionlen
,
unsigned
char
**
cellbuf
,
unsigned
int
*
cellbuflen
)
{
cell_t
*
c
;
unsigned
char
*
buf
;
unsigned
int
buflen
;
unsigned
int
cells
;
unsigned
int
dataleft
;
unsigned
int
i
;
assert
(
aci
&&
onion
&&
onionlen
&&
cellbuf
&&
cellbuflen
);
/* copy the onion into a buffer, prepend with onion length */
buflen
=
onionlen
+
4
;
buf
=
(
unsigned
char
*
)
malloc
(
buflen
);
if
(
!
buf
)
/* malloc() error */
return
-
1
;
log
(
LOG_DEBUG
,
"pack_create() : Setting onion length to %u."
,
onionlen
);
*
(
uint32_t
*
)
buf
=
htonl
(
onionlen
);
memcpy
((
void
*
)(
buf
+
4
),(
void
*
)
onion
,
onionlen
);
/* calculate number of cells required */
if
(
buflen
%
CELL_PAYLOAD_SIZE
==
0
)
cells
=
buflen
/
CELL_PAYLOAD_SIZE
;
else
cells
=
buflen
/
CELL_PAYLOAD_SIZE
+
1
;
/* allocate memory for the cells */
*
cellbuflen
=
cells
*
sizeof
(
cell_t
);
*
cellbuf
=
malloc
(
*
cellbuflen
);
if
(
!*
cellbuf
)
/* malloc() error */
return
-
1
;
log
(
LOG_DEBUG
,
"pack_create() : Allocated memory for %u cells."
,
cells
);
/* create cells one by one */
dataleft
=
buflen
;
for
(
i
=
0
;
i
<
cells
;
i
++
)
{
log
(
LOG_DEBUG
,
"pack_create() : Packing %u bytes of data."
,
dataleft
);
if
(
dataleft
>=
CELL_PAYLOAD_SIZE
)
{
c
=
new_create_cell
(
aci
,
CELL_PAYLOAD_SIZE
,
buf
+
i
*
CELL_PAYLOAD_SIZE
);
dataleft
-=
CELL_PAYLOAD_SIZE
;
}
else
c
=
new_create_cell
(
aci
,
dataleft
,
buf
+
i
*
CELL_PAYLOAD_SIZE
);
if
(
!
c
)
/* cell creation failed */
{
free
((
void
*
)
*
cellbuf
);
return
-
1
;
}
/* cell creation failed */
log
(
LOG_DEBUG
,
"pack_create() : new_create_cell succeeded; copying the cell into output buffer"
);
/* cell has been created, now copy into buffer */
memcpy
((
void
*
)(
*
cellbuf
+
i
*
sizeof
(
cell_t
)),(
void
*
)
c
,
sizeof
(
cell_t
));
free
((
void
*
)
c
);
}
free
(
buf
);
return
0
;
}
src/or/command.c
View file @
74787aa2
...
...
@@ -31,13 +31,50 @@ void command_process_cell(cell_t *cell, connection_t *conn) {
}
}
/* helper function for command_process_create_cell */
static
int
deliver_onion_to_conn
(
aci_t
aci
,
unsigned
char
*
onion
,
uint32_t
onionlen
,
connection_t
*
conn
)
{
char
*
buf
;
int
buflen
,
dataleft
;
cell_t
cell
;
assert
(
aci
&&
onion
&&
onionlen
);
buflen
=
onionlen
+
4
;
buf
=
malloc
(
buflen
);
if
(
!
buf
)
return
-
1
;
log
(
LOG_DEBUG
,
"deliver_onion_to_conn(): Setting onion length to %u."
,
onionlen
);
*
(
uint32_t
*
)
buf
=
htonl
(
onionlen
);
memcpy
((
void
*
)(
buf
+
4
),(
void
*
)
onion
,
onionlen
);
dataleft
=
buflen
;
while
(
dataleft
>
0
)
{
memset
(
&
cell
,
0
,
sizeof
(
cell_t
));
cell
.
command
=
CELL_CREATE
;
cell
.
aci
=
aci
;
if
(
dataleft
>=
CELL_PAYLOAD_SIZE
)
cell
.
length
=
CELL_PAYLOAD_SIZE
;
else
cell
.
length
=
dataleft
;
memcpy
(
cell
.
payload
,
buf
+
buflen
-
dataleft
,
cell
.
length
);
dataleft
-=
cell
.
length
;
log
(
LOG_DEBUG
,
"deliver_onion_to_conn(): Delivering create cell, payload %d bytes."
,
cell
.
length
);
if
(
connection_write_cell_to_buf
(
&
cell
,
conn
)
<
0
)
{
log
(
LOG_DEBUG
,
"deliver_onion_to_conn(): Could not buffer new create cells. Closing."
);
free
(
buf
);
return
-
1
;
}
}
free
(
buf
);
return
0
;
}
void
command_process_create_cell
(
cell_t
*
cell
,
connection_t
*
conn
)
{
circuit_t
*
circ
;
connection_t
*
n_conn
;
unsigned
char
*
cellbuf
;
/* array of cells */
int
cellbuflen
;
/* size of cellbuf in bytes */
cell_t
*
tmpcell
;
/* pointer to an arbitrary cell */
int
retval
,
i
;
int
retval
;
circ
=
circuit_get_by_aci_conn
(
cell
->
aci
,
conn
);
...
...
@@ -122,30 +159,14 @@ void command_process_create_cell(cell_t *cell, connection_t *conn) {
pad_onion
(
circ
->
onion
,
circ
->
onionlen
,
sizeof
(
onion_layer_t
));
log
(
LOG_DEBUG
,
"command_process_create_cell(): Padded the onion with random data."
);
retval
=
pack_create
(
circ
->
n_aci
,
circ
->
onion
,
circ
->
onionlen
,
&
cellbuf
,
&
cellbuflen
);
retval
=
deliver_onion_to_conn
(
circ
->
n_aci
,
circ
->
onion
,
circ
->
onionlen
,
n_conn
);
// retval = pack_create(circ->n_aci, circ->onion, circ->onionlen, &cellbuf, &cellbuflen);
free
((
void
*
)
circ
->
onion
);
circ
->
onion
=
NULL
;
if
(
retval
==
-
1
)
/* pack_create() error */
{
log
(
LOG_DEBUG
,
"command_process_create_cell(): Could not pack the onion into CREATE cells. Closing the connection."
);
if
(
retval
==
-
1
)
{
log
(
LOG_DEBUG
,
"command_process_create_cell(): Could not deliver the onion to next conn. Closing."
);
circuit_close
(
circ
);
return
;
}
log
(
LOG_DEBUG
,
"command_process_create_cell(): Onion packed into CREATE cells. Buffering the cells."
);
/* queue the create cells for transmission to the next hop */
tmpcell
=
(
cell_t
*
)
cellbuf
;
for
(
i
=
0
;
i
<
cellbuflen
/
sizeof
(
cell_t
);
i
++
)
{
retval
=
connection_write_cell_to_buf
(
tmpcell
,
n_conn
);
if
(
retval
==
-
1
)
/* buffering failed, drop the connection */
{
log
(
LOG_DEBUG
,
"command_process_create_cell(): Could not buffer new create cells. Closing."
);
circuit_close
(
circ
);
return
;
}
tmpcell
++
;
}
free
((
void
*
)
cellbuf
);
return
;
}
else
{
/* this is destined for an exit */
...
...
src/or/config.c
View file @
74787aa2
...
...
@@ -10,7 +10,10 @@
*/
#include
"or.h"
#include
<string.h>
#ifndef POPT_TABLEEND
/* handle popt 1.6 before 1.6.2 */
#define POPT_TABLEEND { NULL, '\0', 0, 0, 0, NULL, NULL }
#endif
const
char
*
basename
(
const
char
*
filename
)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment