Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
C
coco
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
coco
Commits
cb161095
Commit
cb161095
authored
7 years ago
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Update] 准备更改http proxy数据结构
parent
50645630
master
dev
multiprocess
realip
v52
1.5.2
1.5.1
1.5.0
1.4.10
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.3
1.3.2
1.3.1
v1.4.7
v1.4.4
No related merge requests found
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
81 additions
and
86 deletions
+81
-86
httpd.py
coco/httpd.py
+81
-86
No files found.
coco/httpd.py
View file @
cb161095
...
@@ -46,28 +46,28 @@ class BaseNamespace(Namespace):
...
@@ -46,28 +46,28 @@ class BaseNamespace(Namespace):
def
close
(
self
):
def
close
(
self
):
try
:
try
:
self
.
clients
[
request
.
sid
][
"client"
]
.
close
()
self
.
clients
[
request
.
sid
][
"client"
]
.
close
()
except
:
except
IndexError
:
pass
pass
class
ProxyNamespace
(
BaseNamespace
):
class
ProxyNamespace
(
BaseNamespace
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
super
()
.
__init__
(
*
args
,
**
kwargs
)
super
()
.
__init__
(
*
args
,
**
kwargs
)
self
.
c
lient
s
=
dict
()
self
.
c
onnection
s
=
dict
()
self
.
rooms
=
dict
()
self
.
rooms
=
dict
()
def
new_c
lient
(
self
):
def
new_c
onnection
(
self
):
room
=
str
(
uuid
.
uuid4
())
room
_id
=
str
(
uuid
.
uuid4
())
c
lient
=
{
c
onnection
=
{
"cols"
:
int
(
request
.
cookies
.
get
(
'cols'
,
80
)),
"cols"
:
int
(
request
.
cookies
.
get
(
'cols'
,
80
)),
"rows"
:
int
(
request
.
cookies
.
get
(
'rows'
,
24
)),
"rows"
:
int
(
request
.
cookies
.
get
(
'rows'
,
24
)),
"room"
:
room
,
"room"
:
room
_id
,
"proxy"
:
dict
(),
"proxy"
:
dict
(),
"client"
:
dict
(),
"client"
:
dict
(),
"forwarder"
:
dict
(),
"forwarder"
:
dict
(),
"request"
:
self
.
make_coco_request
()
"request"
:
self
.
make_coco_request
()
}
}
return
c
lient
return
c
onnection
def
make_coco_request
(
self
):
def
make_coco_request
(
self
):
x_forwarded_for
=
request
.
headers
.
get
(
"X-Forwarded-For"
,
''
)
.
split
(
','
)
x_forwarded_for
=
request
.
headers
.
get
(
"X-Forwarded-For"
,
''
)
.
split
(
','
)
...
@@ -98,38 +98,24 @@ class ProxyNamespace(BaseNamespace):
...
@@ -98,38 +98,24 @@ class ProxyNamespace(BaseNamespace):
def
on_connect
(
self
):
def
on_connect
(
self
):
logger
.
debug
(
"On connect event trigger"
)
logger
.
debug
(
"On connect event trigger"
)
super
()
.
on_connect
()
super
()
.
on_connect
()
c
lient
=
self
.
new_client
()
c
onnection
=
self
.
new_connection
()
self
.
c
lients
[
request
.
sid
]
=
client
self
.
c
onnections
[
request
.
sid
]
=
connection
self
.
rooms
[
c
lient
[
'room'
]]
=
{
self
.
rooms
[
c
onnection
[
'room'
]]
=
{
"admin"
:
request
.
sid
,
"admin"
:
request
.
sid
,
"member"
:
[],
"member"
:
[],
"rw"
:
[]
"rw"
:
[]
}
}
join_room
(
client
[
'room'
])
join_room
(
connection
[
'room'
])
def
on_data
(
self
,
message
):
"""
收到浏览器请求
:param message: {"data": "xxx", "room": "xxx"}
:return:
"""
room
=
message
.
get
(
'room'
)
if
not
room
:
return
room_proxy
=
self
.
clients
[
request
.
sid
][
'proxy'
]
.
get
(
room
)
if
room_proxy
:
room_proxy
.
send
({
"data"
:
message
[
'data'
]})
def
on_host
(
self
,
message
):
def
on_host
(
self
,
message
):
# 此处获取主机的信息
# 此处获取主机的信息
logger
.
debug
(
"On host event trigger"
)
logger
.
debug
(
"On host event trigger"
)
connection
=
str
(
uuid
.
uuid4
())
room_id
=
str
(
uuid
.
uuid4
())
asset_id
=
message
.
get
(
'uuid'
,
None
)
asset_id
=
message
.
get
(
'uuid'
,
None
)
user_id
=
message
.
get
(
'userid'
,
None
)
user_id
=
message
.
get
(
'userid'
,
None
)
secret
=
message
.
get
(
'secret'
,
None
)
secret
=
message
.
get
(
'secret'
,
None
)
self
.
emit
(
'room'
,
{
'room'
:
connection
,
'secret'
:
secret
})
self
.
emit
(
'room'
,
{
'room'
:
room_id
,
'secret'
:
secret
})
if
not
asset_id
or
not
user_id
:
if
not
asset_id
or
not
user_id
:
# self.on_connect()
# self.on_connect()
return
return
...
@@ -142,24 +128,36 @@ class ProxyNamespace(BaseNamespace):
...
@@ -142,24 +128,36 @@ class ProxyNamespace(BaseNamespace):
return
return
child
,
parent
=
socket
.
socketpair
()
child
,
parent
=
socket
.
socketpair
()
self
.
c
lients
[
request
.
sid
][
"client"
][
connection
]
=
Client
(
self
.
c
onnections
[
request
.
sid
][
"client"
][
room_id
]
=
Client
(
parent
,
self
.
c
lient
s
[
request
.
sid
][
"request"
]
parent
,
self
.
c
onnection
s
[
request
.
sid
][
"request"
]
)
)
self
.
c
lients
[
request
.
sid
][
"proxy"
][
connection
]
=
WSProxy
(
self
.
c
onnections
[
request
.
sid
][
"proxy"
][
room_id
]
=
WSProxy
(
self
,
child
,
self
.
c
lients
[
request
.
sid
][
"room"
],
connection
self
,
child
,
self
.
c
onnections
[
request
.
sid
][
"room"
],
room_id
)
)
self
.
c
lients
[
request
.
sid
][
"forwarder"
][
connection
]
=
ProxyServer
(
self
.
c
onnections
[
request
.
sid
][
"forwarder"
][
room_id
]
=
ProxyServer
(
self
.
app
,
self
.
c
lients
[
request
.
sid
][
"client"
][
connection
]
self
.
app
,
self
.
c
onnections
[
request
.
sid
][
"client"
][
room_id
]
)
)
self
.
socketio
.
start_background_task
(
self
.
socketio
.
start_background_task
(
self
.
c
lients
[
request
.
sid
][
"forwarder"
][
connection
]
.
proxy
,
self
.
c
onnections
[
request
.
sid
][
"forwarder"
][
room_id
]
.
proxy
,
asset
,
system_user
asset
,
system_user
)
)
def
on_data
(
self
,
message
):
"""
收到浏览器请求
:param message: {"data": "xxx", "room": "xxx"}
:return:
"""
room
=
message
.
get
(
'room'
)
if
not
room
:
return
room_proxy
=
self
.
connections
[
request
.
sid
][
'proxy'
]
.
get
(
room
)
if
room_proxy
:
room_proxy
.
send
({
"data"
:
message
[
'data'
]})
def
on_token
(
self
,
message
):
def
on_token
(
self
,
message
):
# 此处获取token含有的主机的信息
# 此处获取token含有的主机的信息
logger
.
debug
(
"On token trigger"
)
logger
.
debug
(
"On token trigger"
)
logger
.
debug
(
message
)
token
=
message
.
get
(
'token'
,
None
)
token
=
message
.
get
(
'token'
,
None
)
secret
=
message
.
get
(
'secret'
,
None
)
secret
=
message
.
get
(
'secret'
,
None
)
connection
=
str
(
uuid
.
uuid4
())
connection
=
str
(
uuid
.
uuid4
())
...
@@ -170,51 +168,50 @@ class ProxyNamespace(BaseNamespace):
...
@@ -170,51 +168,50 @@ class ProxyNamespace(BaseNamespace):
self
.
emit
(
'disconnect'
)
self
.
emit
(
'disconnect'
)
return
None
return
None
host
=
self
.
app
.
service
.
get_token_asset
(
token
)
info
=
self
.
app
.
service
.
get_token_asset
(
token
)
logger
.
debug
(
host
)
logger
.
debug
(
info
)
if
not
host
:
if
not
info
:
logger
.
debug
(
"host is None"
)
logger
.
debug
(
"host is None"
)
self
.
emit
(
'data'
,
{
'data'
:
"
\n
Operation not permitted!"
,
'room'
:
connection
})
self
.
emit
(
'data'
,
{
'data'
:
"
\n
Operation not permitted!"
,
'room'
:
connection
})
self
.
emit
(
'disconnect'
)
self
.
emit
(
'disconnect'
)
return
None
return
None
user_id
=
host
.
get
(
'user'
,
None
)
user_id
=
info
.
get
(
'user'
,
None
)
logger
.
debug
(
"self.current_user"
)
logger
.
debug
(
"self.current_user"
)
self
.
current_user
=
self
.
app
.
service
.
get_user_profile
(
user_id
)
self
.
current_user
=
self
.
app
.
service
.
get_user_profile
(
user_id
)
self
.
clients
[
request
.
sid
][
"request"
]
.
user
=
self
.
current_user
self
.
connections
[
request
.
sid
][
"request"
]
.
user
=
self
.
current_user
logger
.
debug
(
self
.
current_user
)
logger
.
debug
(
self
.
current_user
)
self
.
on_host
({
'secret'
:
secret
,
'uuid'
:
host
[
'asset'
],
'userid'
:
host
[
'system_user'
]})
self
.
on_host
({
'secret'
:
secret
,
'uuid'
:
info
[
'asset'
],
'userid'
:
info
[
'system_user'
]})
def
on_resize
(
self
,
message
):
def
on_resize
(
self
,
message
):
cols
=
message
.
get
(
'cols'
)
cols
=
message
.
get
(
'cols'
)
rows
=
message
.
get
(
'rows'
)
rows
=
message
.
get
(
'rows'
)
logger
.
debug
(
"On resize event trigger: {}*{}"
.
format
(
cols
,
rows
))
logger
.
debug
(
"On resize event trigger: {}*{}"
.
format
(
cols
,
rows
))
if
cols
and
rows
and
self
.
c
lient
s
[
request
.
sid
][
"request"
]:
if
cols
and
rows
and
self
.
c
onnection
s
[
request
.
sid
][
"request"
]:
self
.
c
lient
s
[
request
.
sid
][
"request"
]
.
meta
[
'width'
]
=
cols
self
.
c
onnection
s
[
request
.
sid
][
"request"
]
.
meta
[
'width'
]
=
cols
self
.
c
lient
s
[
request
.
sid
][
"request"
]
.
meta
[
'height'
]
=
rows
self
.
c
onnection
s
[
request
.
sid
][
"request"
]
.
meta
[
'height'
]
=
rows
self
.
c
lient
s
[
request
.
sid
][
"request"
]
.
change_size_event
.
set
()
self
.
c
onnection
s
[
request
.
sid
][
"request"
]
.
change_size_event
.
set
()
def
on_room
(
self
,
session_id
):
#
def on_room(self, session_id):
logger
.
debug
(
"On room event trigger"
)
#
logger.debug("On room event trigger")
if
session_id
not
in
self
.
client
s
.
keys
():
# if session_id not in self.connection
s.keys():
self
.
emit
(
#
self.emit(
'error'
,
"no such session"
,
#
'error', "no such session",
room
=
self
.
client
s
[
request
.
sid
][
"room"
]
# room=self.connection
s[request.sid]["room"]
)
#
)
else
:
#
else:
self
.
emit
(
#
self.emit(
'room'
,
self
.
client
s
[
session_id
][
"room"
],
# 'room', self.connection
s[session_id]["room"],
room
=
self
.
client
s
[
request
.
sid
][
"room"
]
# room=self.connection
s[request.sid]["room"]
)
#
)
#
def
on_join
(
self
,
room
):
#
def on_join(self, room):
logger
.
debug
(
"On join room event trigger"
)
#
logger.debug("On join room event trigger")
self
.
on_leave
(
self
.
client
s
[
request
.
id
][
"room"
])
# self.on_leave(self.connection
s[request.id]["room"])
self
.
client
s
[
request
.
sid
][
"room"
]
=
room
# self.connection
s[request.sid]["room"] = room
self
.
rooms
[
room
][
"member"
]
.
append
(
request
.
sid
)
#
self.rooms[room]["member"].append(request.sid)
join_room
(
room
=
room
)
#
join_room(room=room)
#
def
on_leave
(
self
,
room
):
def
on_leave
(
self
,
room
):
logger
.
debug
(
"On leave room event trigger"
)
logger
.
debug
(
"On leave room event trigger"
)
if
self
.
rooms
[
room
][
"admin"
]
==
request
.
sid
:
if
self
.
rooms
[
room
][
"admin"
]
==
request
.
sid
:
...
@@ -224,29 +221,20 @@ class ProxyNamespace(BaseNamespace):
...
@@ -224,29 +221,20 @@ class ProxyNamespace(BaseNamespace):
def
on_disconnect
(
self
):
def
on_disconnect
(
self
):
logger
.
debug
(
"On disconnect event trigger"
)
logger
.
debug
(
"On disconnect event trigger"
)
self
.
on_leave
(
self
.
clients
[
request
.
sid
][
"room"
])
# self.on_leave(self.clients[request.sid]["room"])
print
(
self
.
connections
[
request
.
sid
][
"client"
])
try
:
try
:
for
connection
in
self
.
c
lient
s
[
request
.
sid
][
"client"
]:
for
connection
in
self
.
c
onnection
s
[
request
.
sid
][
"client"
]:
self
.
on_logout
(
connection
)
self
.
on_logout
(
connection
)
del
self
.
c
lient
s
[
request
.
sid
]
del
self
.
c
onnection
s
[
request
.
sid
]
except
:
except
IndexError
:
pass
pass
def
on_logout
(
self
,
connection
):
def
on_logout
(
self
,
connection
):
logger
.
debug
(
"On logout event trigger"
)
logger
.
debug
(
"On logout event trigger"
)
if
connection
:
if
connection
in
self
.
connections
[
request
.
sid
][
"proxy"
]
.
keys
():
if
connection
in
self
.
clients
[
request
.
sid
][
"proxy"
]
.
keys
():
self
.
connections
[
request
.
sid
][
"proxy"
][
connection
]
.
close
()
self
.
clients
[
request
.
sid
][
"proxy"
][
connection
]
.
close
()
del
self
.
connections
[
request
.
sid
][
'proxy'
][
connection
]
del
self
.
clients
[
request
.
sid
][
'proxy'
][
connection
]
def
logout
(
self
,
connection
):
if
connection
and
(
request
.
sid
in
self
.
clients
.
keys
()):
if
connection
in
self
.
clients
[
request
.
sid
][
"proxy"
]
.
keys
():
del
self
.
clients
[
request
.
sid
][
"proxy"
][
connection
]
if
connection
in
self
.
clients
[
request
.
sid
][
"forwarder"
]
.
keys
():
del
self
.
clients
[
request
.
sid
][
"forwarder"
][
connection
]
if
connection
in
self
.
clients
[
request
.
sid
][
"client"
]
.
keys
():
del
self
.
clients
[
request
.
sid
][
"client"
][
connection
]
class
HttpServer
:
class
HttpServer
:
...
@@ -256,7 +244,11 @@ class HttpServer:
...
@@ -256,7 +244,11 @@ class HttpServer:
'coco'
:
None
,
'coco'
:
None
,
'LOGIN_URL'
:
'/login'
'LOGIN_URL'
:
'/login'
}
}
async_mode
=
"threading"
init_kwargs
=
dict
(
async_mode
=
"threading"
,
ping_timeout
=
20
,
ping_interval
=
10
)
def
__init__
(
self
,
coco
):
def
__init__
(
self
,
coco
):
config
=
coco
.
config
config
=
coco
.
config
...
@@ -273,7 +265,10 @@ class HttpServer:
...
@@ -273,7 +265,10 @@ class HttpServer:
def
run
(
self
):
def
run
(
self
):
host
=
self
.
flask_app
.
config
[
"BIND_HOST"
]
host
=
self
.
flask_app
.
config
[
"BIND_HOST"
]
port
=
self
.
flask_app
.
config
[
"HTTPD_PORT"
]
port
=
self
.
flask_app
.
config
[
"HTTPD_PORT"
]
self
.
socket_io
.
init_app
(
self
.
flask_app
,
async_mode
=
self
.
async_mode
)
self
.
socket_io
.
init_app
(
self
.
flask_app
,
**
self
.
init_kwargs
)
self
.
socket_io
.
run
(
self
.
flask_app
,
port
=
port
,
host
=
host
,
debug
=
False
)
self
.
socket_io
.
run
(
self
.
flask_app
,
port
=
port
,
host
=
host
,
debug
=
False
)
def
shutdown
(
self
):
def
shutdown
(
self
):
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
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