Erik Johnston
|
42b7139dec
|
Remove unused import
|
2015-04-27 15:59:56 +01:00 |
|
Erik Johnston
|
1ef66cc3bd
|
Move database configuration into config module
|
2015-04-27 15:57:43 +01:00 |
|
Erik Johnston
|
416a3e6c4f
|
Ensure check_same_thread is enabled for sqlite3
|
2015-04-27 15:44:30 +01:00 |
|
David Baker
|
df75914791
|
pep8
|
2015-04-27 11:48:33 +01:00 |
|
David Baker
|
b02e1006b9
|
Run database check before daemonizing, at the cost of database hygiene.
|
2015-04-27 11:46:00 +01:00 |
|
David Baker
|
f8152f2708
|
rename db method to be more informative
|
2015-04-27 10:16:26 +01:00 |
|
David Baker
|
a7b51f4539
|
Check users in our table aren't on a different domain to the one we're configured with to try & fix SYN-266
|
2015-04-24 18:11:21 +01:00 |
|
Erik Johnston
|
ffad75bd62
|
Remove mysql/maria support
|
2015-04-15 17:00:50 +01:00 |
|
Erik Johnston
|
6606f7c659
|
Merge branch 'develop' of github.com:matrix-org/synapse into postgres
|
2015-04-15 10:27:20 +01:00 |
|
Mark Haines
|
d488463fa3
|
Add a version 2 of the key server api
|
2015-04-14 16:04:52 +01:00 |
|
Erik Johnston
|
58d8339966
|
Add support for postgres instead of mysql. Change sql accourdingly. blob + varbinary -> bytea. No support for UNSIGNED or CREATE INDEX IF NOT EXISTS.
|
2015-04-14 13:53:20 +01:00 |
|
Mark Haines
|
3cbc286d06
|
Move server key api into rest/key/v1
|
2015-04-14 13:28:11 +01:00 |
|
Erik Johnston
|
c5365dee56
|
Use case sensitive collations
|
2015-04-10 18:46:33 +01:00 |
|
Erik Johnston
|
4fe95094d1
|
Merge branch 'develop' of github.com:matrix-org/synapse into mysql
|
2015-04-07 18:05:39 +01:00 |
|
Erik Johnston
|
0bfa78b39b
|
PEP8
|
2015-04-07 12:16:05 +01:00 |
|
Erik Johnston
|
d0e444a648
|
Explicitly name the __main__ module logger
|
2015-04-07 12:04:02 +01:00 |
|
Erik Johnston
|
779f7b0f44
|
Fix unicode support
|
2015-04-02 10:06:22 +01:00 |
|
Erik Johnston
|
e24c32e6f3
|
Fix SQLite support
|
2015-04-01 15:09:51 +01:00 |
|
Erik Johnston
|
9236136f3a
|
Make work in both Maria and SQLite. Fix tests
|
2015-04-01 14:12:33 +01:00 |
|
Kegan Dougal
|
3470cb36a8
|
Pyflakes
|
2015-03-31 13:03:31 +01:00 |
|
Kegan Dougal
|
e7887e37a8
|
Remove appservice REST servlets
|
2015-03-31 09:32:40 +01:00 |
|
Erik Johnston
|
0e8f5095c7
|
Fix unicode database support
|
2015-03-25 17:15:20 +00:00 |
|
Erik Johnston
|
f6583796fe
|
Merge branch 'develop' of github.com:matrix-org/synapse into mysql
|
2015-03-20 16:31:48 +00:00 |
|
Erik Johnston
|
455579ca90
|
Make database selection configurable
|
2015-03-20 10:55:55 +00:00 |
|
David Baker
|
7564dac8cb
|
Wire up the webclient option
It existed but was hardcoded to True.
Give it an underscore for consistency.
Also don't pull in syweb unless we're actually using the web client.
|
2015-03-17 12:45:37 +01:00 |
|
Matthew Hodgson
|
c8032aec17
|
actually uphold the bind_host parameter. in theory should make ipv6 binds work like bind_host: 'fe80::1%lo0'
|
2015-03-14 00:12:20 +00:00 |
|
Paul "LeoNerd" Evans
|
b98b4c135d
|
Option to serve metrics from their own localhost-only TCP port instead of muxed on the main listener
|
2015-03-12 16:24:51 +00:00 |
|
Paul "LeoNerd" Evans
|
a2cdd11d4a
|
Fold the slightly-odd bind_port/secure_port/etc.. logic into SynapseHomeServer.start_listening()
|
2015-03-12 16:24:51 +00:00 |
|
Paul "LeoNerd" Evans
|
e0214a263b
|
Build MetricsResource as a specific HomeServer dependency
|
2015-03-12 16:24:51 +00:00 |
|
Paul "LeoNerd" Evans
|
e07fc62833
|
A trivial 'hello world'-style resource on /_synapse/metrics, with optional commandline flag
|
2015-03-12 16:24:50 +00:00 |
|
Paul "LeoNerd" Evans
|
211c14c391
|
No need to explicitly pass 'web_client' in to create_resource_tree as it can be found via config
|
2015-03-12 16:24:50 +00:00 |
|
Erik Johnston
|
045afd6b61
|
in_thread takes no arguments
|
2015-03-10 10:19:03 +00:00 |
|
Erik Johnston
|
c37eceeb9e
|
Split out the 'run' from 'setup'
|
2015-03-10 09:58:33 +00:00 |
|
Erik Johnston
|
b8a6692657
|
Add documentation. When starting via twistd respect soft_file_limit config option.
|
2015-03-10 09:39:42 +00:00 |
|
Erik Johnston
|
f31e65ca8b
|
Merge branch 'develop' of github.com:matrix-org/synapse into erikj-perf
|
2015-03-09 13:29:41 +00:00 |
|
Erik Johnston
|
c54773473f
|
Merge branch 'master' of github.com:matrix-org/synapse into develop
|
2015-03-06 14:23:41 +00:00 |
|
Erik Johnston
|
82b34e813d
|
SYN-67: Finish up implementing new database schema management
|
2015-03-04 12:04:19 +00:00 |
|
Erik Johnston
|
3fce185c77
|
Merge pull request #83 from matrix-org/nofile_limit_config
Add config option to set the soft fd limit on start
|
2015-03-02 13:52:16 +00:00 |
|
Kegan Dougal
|
28d8614f48
|
Trailing comma
|
2015-02-23 17:36:37 +00:00 |
|
Kegan Dougal
|
0696dfd94b
|
Actually treat this as static content, not random Resources.
|
2015-02-23 15:35:09 +00:00 |
|
Kegan Dougal
|
22399d3d8f
|
Add RegisterFallbackResource to /_matrix/static/client/register
Try to keep both forms of registration logic (native/fallback) close
together for sanity.
|
2015-02-23 15:14:56 +00:00 |
|
Erik Johnston
|
1f29fafc95
|
Don't exit if we can't work out if we're running in a git repo
|
2015-02-21 13:44:46 +00:00 |
|
Erik Johnston
|
7c56210f20
|
By default set soft limit to hard limit
|
2015-02-20 16:09:44 +00:00 |
|
Erik Johnston
|
939273c4b0
|
Rename resource variable so as to not shadow module import
|
2015-02-19 11:53:13 +00:00 |
|
Erik Johnston
|
c3eb7dd9c5
|
Add config option to set the soft fd limit on start
|
2015-02-19 11:50:49 +00:00 |
|
Erik Johnston
|
6311ae8968
|
Conform to header spec take two
|
2015-02-18 17:34:26 +00:00 |
|
Erik Johnston
|
b6771037a6
|
Make version_string conform to User-Agent and Server spec
|
2015-02-18 17:31:50 +00:00 |
|
Erik Johnston
|
1df8bad63e
|
pyflakes
|
2015-02-18 16:54:25 +00:00 |
|
Erik Johnston
|
aa577df064
|
When computing git version run git commands in same dir as source files
|
2015-02-18 16:52:04 +00:00 |
|
Erik Johnston
|
d122e215ff
|
Generate a version string that includes git details if run from git checkout
|
2015-02-18 16:52:04 +00:00 |
|
Erik Johnston
|
2635d4e634
|
Merge branch 'develop' of github.com:matrix-org/synapse into develop
|
2015-02-18 10:29:54 +00:00 |
|
Erik Johnston
|
ec847059f3
|
Rename _fail_fetch_pdu_cache to _get_pdu_cache
|
2015-02-18 10:14:10 +00:00 |
|
Erik Johnston
|
1177245e86
|
Merge branch 'hotfixes-v0.7.0g' of github.com:matrix-org/synapse into develop
|
2015-02-17 17:30:11 +00:00 |
|
Erik Johnston
|
8b919c00f3
|
Start the get_pdu cache
|
2015-02-17 15:44:01 +00:00 |
|
Erik Johnston
|
ea1d6c16cd
|
Don't write bytecode
|
2015-02-17 10:54:06 +00:00 |
|
Mark Haines
|
0d872f5aa6
|
Merge pull request #50 from matrix-org/application-services
Application Services
|
2015-02-13 15:06:14 +00:00 |
|
Mark Haines
|
183b3d4e47
|
Prepare the database whenever a connection is opened from the db_pool so that in-memory databases will work
|
2015-02-13 14:38:24 +00:00 |
|
Erik Johnston
|
5758dafb4e
|
Merge branch 'develop' of github.com:matrix-org/synapse into state-chache
|
2015-02-11 10:35:13 +00:00 |
|
Kegan Dougal
|
9978c5c103
|
Merge branch 'develop' into application-services
|
2015-02-11 10:03:24 +00:00 |
|
Mark Haines
|
84a769cdb7
|
Fix code-style
|
2015-02-10 17:58:36 +00:00 |
|
Erik Johnston
|
c86ebe7673
|
Merge branch 'develop' of github.com:matrix-org/synapse into state-chache
Conflicts:
synapse/app/homeserver.py
synapse/state.py
|
2015-02-10 11:04:37 +00:00 |
|
Kegan Dougal
|
53557fc532
|
Merge branch 'develop' into application-services
|
2015-02-09 15:20:56 +00:00 |
|
Erik Johnston
|
75656712e3
|
Time how long we're spending on the database thread
|
2015-02-09 14:22:52 +00:00 |
|
Erik Johnston
|
24cc6979fb
|
Log when we receive a request, when we send a response and how long it took to process it.
|
2015-02-09 13:46:22 +00:00 |
|
Erik Johnston
|
5bf318e9a6
|
Bug fixes.
|
2015-02-06 16:52:22 +00:00 |
|
Kegan Dougal
|
c059c9fea5
|
Merge branch 'develop' into application-services
Conflicts:
synapse/handlers/__init__.py
synapse/storage/__init__.py
|
2015-02-02 15:57:59 +00:00 |
|
David Baker
|
c291a4d522
|
Merge branch 'develop' into pushers
Conflicts:
synapse/handlers/events.py
synapse/server.py
|
2015-01-28 12:51:05 +00:00 |
|
Kegan Dougal
|
fa8e6ff900
|
Add stub application services REST API.
|
2015-01-27 14:01:51 +00:00 |
|
Mark Haines
|
7b814d3f7f
|
Add client v2_alpha resource to synapse server resource tree
|
2015-01-23 18:55:19 +00:00 |
|
Mark Haines
|
7256def8e4
|
Merge rest servlets into the client json resource object
|
2015-01-23 10:37:38 +00:00 |
|
David Baker
|
5c6189ea3e
|
Merge branch 'develop' into pushers
Conflicts:
synapse/rest/__init__.py
|
2015-01-22 17:46:16 +00:00 |
|
Mark Haines
|
97c68c508d
|
Move rest APIs back under the rest directory
|
2015-01-22 16:10:07 +00:00 |
|
Erik Johnston
|
7f058c5ff7
|
Merge branch 'develop' of github.com:matrix-org/synapse into erikj-perf
Conflicts:
synapse/app/homeserver.py
|
2015-01-22 13:35:34 +00:00 |
|
Mark Haines
|
42529cbced
|
Fix pyflakes errors
|
2015-01-19 15:33:04 +00:00 |
|
Mark Haines
|
00e9c08609
|
Fix syntax
|
2015-01-19 15:30:48 +00:00 |
|
Mark Haines
|
3e85e52b3f
|
Allow ':memory:' as the database path for sqlite3
|
2015-01-19 15:26:19 +00:00 |
|
David Baker
|
c06a9063e1
|
Merge branch 'develop' into pushers
|
2015-01-13 13:15:51 +00:00 |
|
Mark Haines
|
63403aa7a5
|
Check the existance and versions of necessary modules when starting synapse, log which modules are used
|
2015-01-08 17:08:57 +00:00 |
|
Erik Johnston
|
42507b0011
|
Log server version on startup
|
2015-01-07 17:25:28 +00:00 |
|
Erik Johnston
|
82be4457de
|
Add twisted Service interface
|
2015-01-07 13:46:37 +00:00 |
|
Mark Haines
|
5cf45c4319
|
Merge branch 'master' into develop
|
2015-01-06 19:48:53 +00:00 |
|
Mark Haines
|
adb04b1e57
|
Update copyright notices
|
2015-01-06 13:21:39 +00:00 |
|
Matthew Hodgson
|
407c299828
|
improve error msg
|
2014-12-24 17:50:42 +00:00 |
|
David Baker
|
b56730bb6e
|
Merge branch 'develop' into pushers
Conflicts:
synapse/api/errors.py
synapse/server.py
synapse/storage/__init__.py
|
2014-12-18 15:15:22 +00:00 |
|
Erik Johnston
|
2e44714214
|
Make failure to run appropraite upgrade scripts more helpful.
|
2014-12-16 14:20:32 +00:00 |
|
Mark Haines
|
5da65085d1
|
Get uploads working with new media repo
|
2014-12-02 19:51:47 +00:00 |
|
David Baker
|
58f82e2e54
|
Merge branch 'develop' into pushers
|
2014-11-20 18:25:31 +00:00 |
|
David Baker
|
23465a30b6
|
Merge branch 'develop' into pushers
|
2014-11-20 18:17:46 +00:00 |
|
David Baker
|
f1c7f8e813
|
Merge branch 'develop' into http_client_refactor
|
2014-11-20 17:49:48 +00:00 |
|
David Baker
|
e377d33652
|
Separate out the matrix http client completely because just about all of its code it now separate from the simple case we need for standard HTTP(S)
|
2014-11-20 17:41:56 +00:00 |
|
Mark Haines
|
db9ce032a4
|
Fix pep8 codestyle warnings
|
2014-11-20 17:26:36 +00:00 |
|
Mark Haines
|
dfdda2c871
|
Use module loggers rather than the root logger. Exceptions caused by bad clients shouldn't cause ERROR level logging. Fix sql logging to use 'repr' rather than 'str'
|
2014-11-20 17:10:37 +00:00 |
|
David Baker
|
ebf6c08a47
|
Merge branch 'http_client_refactor' into pushers
|
2014-11-20 14:01:41 +00:00 |
|
David Baker
|
dc60eee50e
|
Refactor the HTTP clients a little.
|
2014-11-20 13:53:34 +00:00 |
|
David Baker
|
74c3879760
|
Start creating a module to do generic notifications (just prints them to stdout currently!)
|
2014-11-19 18:20:59 +00:00 |
|
Erik Johnston
|
c6ea29d916
|
Revert accidental commit of bad file
|
2014-11-18 15:57:00 +00:00 |
|
Erik Johnston
|
95614e5220
|
Fix auth to correctly handle initial creation of rooms
|
2014-11-18 15:36:41 +00:00 |
|
Mark Haines
|
26fc878944
|
Stop before starting when restarting
|
2014-11-17 19:16:15 +00:00 |
|
Mark Haines
|
e903c941cb
|
Merge branch 'develop' into request_logging
Conflicts:
setup.py
synapse/storage/_base.py
synapse/util/async.py
|
2014-11-14 11:16:50 +00:00 |
|
Mark Haines
|
e7c6d2c9d9
|
SYN-138: Rewrite synctl in python and include it in the python distribution
|
2014-11-13 14:39:30 +00:00 |
|
Erik Johnston
|
3cb678f84c
|
Merge branch 'develop' of github.com:matrix-org/synapse into federation_authorization
|
2014-11-07 10:55:28 +00:00 |
|
Mark Haines
|
dca3ba2f77
|
Determine webclient path by the python module it is contained in
|
2014-11-04 16:19:16 +00:00 |
|
Erik Johnston
|
af7ae048f8
|
Add option to not bind to HTTPS port. This is useful if running behind an ssl load balancer
|
2014-11-03 15:06:40 +00:00 |
|
Mark Haines
|
7a756e5d9d
|
Remove unused 'context' variables to appease pyflakes
|
2014-10-30 11:15:39 +00:00 |
|
Mark Haines
|
7c06399512
|
Merge branch 'develop' into request_logging
Conflicts:
synapse/config/logger.py
|
2014-10-30 11:13:58 +00:00 |
|
Mark Haines
|
7d709542ca
|
Fix pep8 warnings
|
2014-10-30 11:10:17 +00:00 |
|
Mark Haines
|
b29517bd01
|
Add a request-id to each log line
|
2014-10-30 01:21:33 +00:00 |
|
Mark Haines
|
984e207b59
|
Merge branch develop into server2server_signing
Conflicts:
synapse/app/homeserver.py
|
2014-10-13 10:58:50 +01:00 |
|
Mark Haines
|
4f11518934
|
Split PlainHttpClient into separate clients for talking to Identity servers and talking to Capatcha servers
|
2014-10-02 14:03:26 +01:00 |
|
Mark Haines
|
e3117a2a23
|
Add a _matrix/key/v1 resource with the verification keys of the local server
|
2014-09-23 18:43:34 +01:00 |
|
Paul "LeoNerd" Evans
|
55397f6347
|
prepare_database() on db_conn, not plain name, so we can pass in the connection from outside
|
2014-09-10 16:23:58 +01:00 |
|
Paul "LeoNerd" Evans
|
2faffc52ee
|
Make sure not to open our TCP ports until /after/ the DB is nicely prepared ready for use
|
2014-09-10 16:16:24 +01:00 |
|
Paul "LeoNerd" Evans
|
6c1f0055dc
|
No need for a tiny run() function any more, just use reactor.run() directly
|
2014-09-10 16:07:44 +01:00 |
|
Paul "LeoNerd" Evans
|
ce55a8cc4b
|
Move database preparing code out of homserver.py into storage where it belongs
|
2014-09-10 15:42:15 +01:00 |
|
Erik Johnston
|
9dd4570b68
|
Generate m.room.aliases event when the HS creates a room alias
|
2014-09-05 21:35:56 +01:00 |
|
Matthew Hodgson
|
8a7c1d6a00
|
fix the copyright holder from matrix.org to OpenMarket Ltd, as matrix.org hasn't been incorporated in time for launch.
|
2014-09-03 17:31:57 +01:00 |
|
Paul "LeoNerd" Evans
|
756e171ad0
|
Store SQL DDL deltas as well; attempt to upgrade the database on startup if it's too old
|
2014-09-03 14:14:39 +01:00 |
|
Erik Johnston
|
b50ea730b1
|
Merge branch 'develop' of github.com:matrix-org/synapse into develop
Conflicts:
synapse/http/server.py
synapse/http/content_repository.py
|
2014-09-03 12:01:14 +01:00 |
|
Erik Johnston
|
bc21350298
|
Add option to change content repo location
|
2014-09-03 11:57:23 +01:00 |
|
Mark Haines
|
bf10cf5f1a
|
move contentrepo class to it's own file
|
2014-09-03 11:10:44 +01:00 |
|
Mark Haines
|
c7a7cdf734
|
Add ratelimiting function to basehandler
|
2014-09-02 17:57:04 +01:00 |
|
Mark Haines
|
399e004884
|
Add unsecure listener port to homeserver
|
2014-09-01 22:38:52 +01:00 |
|
Erik Johnston
|
bcfaaf7da6
|
That was a breaking db change. You need to recreate the databases. (In reality, it's enough to just run the im.sql through your db and change the schema version)
|
2014-09-01 20:34:07 +01:00 |
|
Mark Haines
|
a53946a8a1
|
Enable SSL for s2s http client
|
2014-09-01 18:30:00 +01:00 |
|
Mark Haines
|
ef6a8e4f32
|
Listen using SSL
|
2014-09-01 16:30:43 +01:00 |
|
Mark Haines
|
9ea1de432d
|
Fix homeserver config parsing
|
2014-09-01 15:51:15 +01:00 |
|
Mark Haines
|
d9ebe531ed
|
Add config tree to synapse. Add support for reading config from a file
|
2014-08-31 16:06:39 +01:00 |
|
Mark Haines
|
1d95e78759
|
Merge branch 'develop' into storage_transactions
|
2014-08-27 16:54:12 +01:00 |
|
Mark Haines
|
46a2f6a816
|
Remove call to get_federation from homeserver
|
2014-08-27 14:36:20 +01:00 |
|
Paul "LeoNerd" Evans
|
05fa81fee4
|
A reliable logger.info() message /after/ the TCP port has been opened and is listening; this is essential for avoiding races in wrapper scripts e.g. integration testing
|
2014-08-27 13:08:55 +01:00 |
|
Paul "LeoNerd" Evans
|
e677a3114e
|
Use SQLite's PRAGMA user_version to check if the database file really matches the schema we have in mind
|
2014-08-27 11:45:16 +01:00 |
|
Paul "LeoNerd" Evans
|
648796ef1d
|
Neater database setup at application startup time; only .connect() it once, not once per schema file; don't build the db_pool twice
|
2014-08-27 11:45:16 +01:00 |
|
Erik Johnston
|
1291ac93f3
|
Add the ability to turn on the twisted manhole telnet service.
|
2014-08-26 13:43:55 +01:00 |
|
Erik Johnston
|
0c3b4a1f63
|
For the content repo, don't just use homeserver.hostname as that might not include the port due to SRV.
|
2014-08-24 11:56:55 +01:00 |
|
Erik Johnston
|
acf5127604
|
Make the content repo work with in daemon mode. Return the full url on upload. Update the webclient to use new content repo api.
|
2014-08-22 10:25:32 +01:00 |
|
Matthew Hodgson
|
1b0d427285
|
host a webclient by default
|
2014-08-21 23:35:45 +01:00 |
|
Kegan Dougal
|
58548ab557
|
Implemented GETs for the ContentRepoResource. It all actually appears to be working.
|
2014-08-18 17:18:54 +01:00 |
|
Kegan Dougal
|
35da1bf4a3
|
Auth content uploads. Added a mapping function from request > filename. Added exception handling for content uploads. webclient: Only prefix the client API path on doRequest, not doBaseRequest (this would've broken the identity server auth too). Added matrixService.uploadContent. May not require mFileUpload anymore.
|
2014-08-18 17:18:54 +01:00 |
|
Kegan Dougal
|
a18b1a649c
|
Added /matrix/content path, HS resource_for_content_repo attribute and FileUploadResource. Added stub methods.
|
2014-08-18 17:18:54 +01:00 |
|
Erik Johnston
|
e4061383b8
|
Change relative db paths to absolute paths in case we daemonize.
|
2014-08-14 14:07:22 +01:00 |
|
Paul "LeoNerd" Evans
|
e37de2aef3
|
chmod +x homeserver.py
|
2014-08-14 14:05:05 +01:00 |
|
Kegan Dougal
|
d253a35539
|
Added web client prefix
|
2014-08-14 11:54:37 +01:00 |
|
Kegan Dougal
|
c75add6ec8
|
Added a urls module for keeping client and federation prefixes.
|
2014-08-14 11:52:56 +01:00 |
|
Kegan Dougal
|
9fd445eb92
|
If the web client is enabled, automatically redirect root '/' to the web client path.
|
2014-08-14 11:37:13 +01:00 |
|
Kegan Dougal
|
e543d6a91d
|
Fixed dynamic resource mapping to clobber dummy Resources with the actual desired Resource in the event of a collision (as is the case for '/matrix/client' and '/matrix/client/api/v1')
|
2014-08-14 11:18:18 +01:00 |
|
Kegan Dougal
|
de65c34fcf
|
Honour the -w flag to enable the web client at /matrix/client
|
2014-08-14 10:24:17 +01:00 |
|
Kegan Dougal
|
9a1638ed21
|
Removed http_server from HomeServer. Updated unit tests to use either resource_for_federation or resource_for_client depending on what is being tested.
|
2014-08-14 10:18:54 +01:00 |
|
Kegan Dougal
|
29aa13f0d4
|
Make federation use resource_for_federation as well.
|
2014-08-14 10:05:06 +01:00 |
|
Kegan Dougal
|
9f863d3466
|
Start phasing out HttpServer: we should be using Resources instead. Added resource_for_client/federation/web_client to the HomeServer and hooked the C-S servlets to operate on resource_for_client. Dynamically construct the Resource tree.
|
2014-08-14 09:55:16 +01:00 |
|
Kegan Dougal
|
2da1e1526e
|
Don't pass host_web_client flag to register_servlets, it needs to be a Resource not a RestServlet.
|
2014-08-13 15:57:58 +01:00 |
|