Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
synapse
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Monitor
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Maunium
synapse
Commits
820ed34a
Commit
820ed34a
authored
10 years ago
by
Paul "LeoNerd" Evans
Browse files
Options
Downloads
Patches
Plain Diff
Namespace all the Federation HTTP URLs to /matrix/federation/v1/...
parent
cf965af3
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
docs/server-server/specification.rst
+9
-5
9 additions, 5 deletions
docs/server-server/specification.rst
synapse/federation/transport.py
+18
-15
18 additions, 15 deletions
synapse/federation/transport.py
tests/federation/test_federation.py
+8
-7
8 additions, 7 deletions
tests/federation/test_federation.py
with
35 additions
and
27 deletions
docs/server-server/specification.rst
+
9
−
5
View file @
820ed34a
...
...
@@ -116,9 +116,13 @@ federation.]]
Protocol URLs
=============
All these URLs are namespaced within a prefix of
/matrix/federation/v1/...
For active pushing of messages representing live activity "as it happens":
PUT /send/:transaction_id/
PUT
...
/send/:transaction_id/
Body: JSON encoding of a single Transaction
Response: [[TODO(paul): I don't actually understand what
...
...
@@ -132,7 +136,7 @@ For active pushing of messages representing live activity "as it happens":
To fetch a particular PDU:
GET /pdu/:origin/:pdu_id/
GET
...
/pdu/:origin/:pdu_id/
Response: JSON encoding of a single Transaction containing one PDU
...
...
@@ -142,7 +146,7 @@ To fetch a particular PDU:
To fetch all the state of a given context:
GET /state/:context/
GET
...
/state/:context/
Response: JSON encoding of a single Transaction containing multiple PDUs
...
...
@@ -153,7 +157,7 @@ To fetch all the state of a given context:
To paginate events on a given context:
GET /paginate/:context/
GET
...
/paginate/:context/
Query args: v, limit
Response: JSON encoding of a single Transaction containing multiple PDUs
...
...
@@ -167,7 +171,7 @@ To paginate events on a given context:
To stream events all the events:
GET /pull/
GET
...
/pull/
Query args: origin, v
Response: JSON encoding of a single Transaction consisting of multiple PDUs
...
...
This diff is collapsed.
Click to expand it.
synapse/federation/transport.py
+
18
−
15
View file @
820ed34a
...
...
@@ -33,6 +33,9 @@ import re
logger
=
logging
.
getLogger
(
__name__
)
PREFIX
=
"
/matrix/federation/v1
"
class
TransportLayer
(
object
):
"""
This is a basic implementation of the transport layer that translates
transactions and other requests to/from HTTP.
...
...
@@ -84,9 +87,9 @@ class TransportLayer(object):
logger
.
debug
(
"
get_context_state dest=%s, context=%s
"
,
destination
,
context
)
path
=
"
/state/%s/
"
%
context
sub
path
=
"
/state/%s/
"
%
context
return
self
.
_do_request_for_transaction
(
destination
,
path
)
return
self
.
_do_request_for_transaction
(
destination
,
sub
path
)
@log_function
def
get_pdu
(
self
,
destination
,
pdu_origin
,
pdu_id
):
...
...
@@ -104,9 +107,9 @@ class TransportLayer(object):
logger
.
debug
(
"
get_pdu dest=%s, pdu_origin=%s, pdu_id=%s
"
,
destination
,
pdu_origin
,
pdu_id
)
path
=
"
/pdu/%s/%s/
"
%
(
pdu_origin
,
pdu_id
)
sub
path
=
"
/pdu/%s/%s/
"
%
(
pdu_origin
,
pdu_id
)
return
self
.
_do_request_for_transaction
(
destination
,
path
)
return
self
.
_do_request_for_transaction
(
destination
,
sub
path
)
@log_function
def
paginate
(
self
,
dest
,
context
,
pdu_tuples
,
limit
):
...
...
@@ -130,14 +133,14 @@ class TransportLayer(object):
if
not
pdu_tuples
:
return
path
=
"
/paginate/%s/
"
%
context
sub
path
=
"
/paginate/%s/
"
%
context
args
=
{
"
v
"
:
[
"
%s,%s
"
%
(
i
,
o
)
for
i
,
o
in
pdu_tuples
]}
args
[
"
limit
"
]
=
limit
return
self
.
_do_request_for_transaction
(
dest
,
path
,
sub
path
,
args
=
args
,
)
...
...
@@ -166,7 +169,7 @@ class TransportLayer(object):
code
,
response
=
yield
self
.
client
.
put_json
(
transaction
.
destination
,
path
=
"
/send/%s/
"
%
transaction
.
transaction_id
,
path
=
PREFIX
+
"
/send/%s/
"
%
transaction
.
transaction_id
,
data
=
data
)
...
...
@@ -189,7 +192,7 @@ class TransportLayer(object):
# This is when someone is trying to send us a bunch of data.
self
.
server
.
register_path
(
"
PUT
"
,
re
.
compile
(
"
^/send/([^/]*)/$
"
),
re
.
compile
(
"
^
"
+
PREFIX
+
"
/send/([^/]*)/$
"
),
self
.
_on_send_request
)
...
...
@@ -207,7 +210,7 @@ class TransportLayer(object):
# This is for when someone asks us for everything since version X
self
.
server
.
register_path
(
"
GET
"
,
re
.
compile
(
"
^/pull/$
"
),
re
.
compile
(
"
^
"
+
PREFIX
+
"
/pull/$
"
),
lambda
request
:
handler
.
on_pull_request
(
request
.
args
[
"
origin
"
][
0
],
request
.
args
[
"
v
"
]
...
...
@@ -218,7 +221,7 @@ class TransportLayer(object):
# data_id pair.
self
.
server
.
register_path
(
"
GET
"
,
re
.
compile
(
"
^/pdu/([^/]*)/([^/]*)/$
"
),
re
.
compile
(
"
^
"
+
PREFIX
+
"
/pdu/([^/]*)/([^/]*)/$
"
),
lambda
request
,
pdu_origin
,
pdu_id
:
handler
.
on_pdu_request
(
pdu_origin
,
pdu_id
)
...
...
@@ -227,7 +230,7 @@ class TransportLayer(object):
# This is when someone asks for all data for a given context.
self
.
server
.
register_path
(
"
GET
"
,
re
.
compile
(
"
^/state/([^/]*)/$
"
),
re
.
compile
(
"
^
"
+
PREFIX
+
"
/state/([^/]*)/$
"
),
lambda
request
,
context
:
handler
.
on_context_state_request
(
context
)
...
...
@@ -235,7 +238,7 @@ class TransportLayer(object):
self
.
server
.
register_path
(
"
GET
"
,
re
.
compile
(
"
^/paginate/([^/]*)/$
"
),
re
.
compile
(
"
^
"
+
PREFIX
+
"
/paginate/([^/]*)/$
"
),
lambda
request
,
context
:
self
.
_on_paginate_request
(
context
,
request
.
args
[
"
v
"
],
request
.
args
[
"
limit
"
]
...
...
@@ -244,7 +247,7 @@ class TransportLayer(object):
self
.
server
.
register_path
(
"
GET
"
,
re
.
compile
(
"
^/context/([^/]*)/$
"
),
re
.
compile
(
"
^
"
+
PREFIX
+
"
/context/([^/]*)/$
"
),
lambda
request
,
context
:
handler
.
on_context_pdus_request
(
context
)
)
...
...
@@ -300,7 +303,7 @@ class TransportLayer(object):
@defer.inlineCallbacks
@log_function
def
_do_request_for_transaction
(
self
,
destination
,
path
,
args
=
{}):
def
_do_request_for_transaction
(
self
,
destination
,
sub
path
,
args
=
{}):
"""
Args:
destination (str)
...
...
@@ -313,7 +316,7 @@ class TransportLayer(object):
data
=
yield
self
.
client
.
get_json
(
destination
,
path
=
path
,
path
=
PREFIX
+
sub
path
,
args
=
args
,
)
...
...
This diff is collapsed.
Click to expand it.
tests/federation/test_federation.py
+
8
−
7
View file @
820ed34a
...
...
@@ -96,7 +96,7 @@ class FederationTestCase(unittest.TestCase):
# Empty context initially
(
code
,
response
)
=
yield
self
.
mock_http_server
.
trigger
(
"
GET
"
,
"
/state/my-context/
"
,
None
)
"
/
matrix/federation/v1/
state/my-context/
"
,
None
)
self
.
assertEquals
(
200
,
code
)
self
.
assertFalse
(
response
[
"
pdus
"
])
...
...
@@ -121,7 +121,7 @@ class FederationTestCase(unittest.TestCase):
)
(
code
,
response
)
=
yield
self
.
mock_http_server
.
trigger
(
"
GET
"
,
"
/state/my-context/
"
,
None
)
"
/
matrix/federation/v1/
state/my-context/
"
,
None
)
self
.
assertEquals
(
200
,
code
)
self
.
assertEquals
(
1
,
len
(
response
[
"
pdus
"
]))
...
...
@@ -132,7 +132,7 @@ class FederationTestCase(unittest.TestCase):
)
(
code
,
response
)
=
yield
self
.
mock_http_server
.
trigger
(
"
GET
"
,
"
/pdu/red/abc123def456/
"
,
None
)
"
/
matrix/federation/v1/
pdu/red/abc123def456/
"
,
None
)
self
.
assertEquals
(
404
,
code
)
# Now insert such a PDU
...
...
@@ -151,7 +151,7 @@ class FederationTestCase(unittest.TestCase):
)
(
code
,
response
)
=
yield
self
.
mock_http_server
.
trigger
(
"
GET
"
,
"
/pdu/red/abc123def456/
"
,
None
)
"
/
matrix/federation/v1/
pdu/red/abc123def456/
"
,
None
)
self
.
assertEquals
(
200
,
code
)
self
.
assertEquals
(
1
,
len
(
response
[
"
pdus
"
]))
self
.
assertEquals
(
"
m.text
"
,
response
[
"
pdus
"
][
0
][
"
pdu_type
"
])
...
...
@@ -177,7 +177,7 @@ class FederationTestCase(unittest.TestCase):
self
.
mock_http_client
.
put_json
.
assert_called_with
(
"
remote
"
,
path
=
"
/send/1000000/
"
,
path
=
"
/
matrix/federation/v1/
send/1000000/
"
,
data
=
{
"
ts
"
:
1000000
,
"
origin
"
:
"
test
"
,
...
...
@@ -212,7 +212,7 @@ class FederationTestCase(unittest.TestCase):
# MockClock ensures we can guess these timestamps
self
.
mock_http_client
.
put_json
.
assert_called_with
(
"
remote
"
,
path
=
"
/send/1000000/
"
,
path
=
"
/
matrix/federation/v1/
send/1000000/
"
,
data
=
{
"
origin
"
:
"
test
"
,
"
ts
"
:
1000000
,
...
...
@@ -234,7 +234,8 @@ class FederationTestCase(unittest.TestCase):
self
.
federation
.
register_edu_handler
(
"
m.test
"
,
recv_observer
)
yield
self
.
mock_http_server
.
trigger
(
"
PUT
"
,
"
/send/1001000/
"
,
yield
self
.
mock_http_server
.
trigger
(
"
PUT
"
,
"
/matrix/federation/v1/send/1001000/
"
,
"""
{
"
origin
"
:
"
remote
"
,
"
ts
"
: 1001000,
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment