Hi,
the last remaining TODO of merging the "event-notifications" branch of WOT to
the master branch is to ask you guys for your opinion on whether you are OK
with the FCP API. This mail does that.
Short summary of what event-notifications provides: Before event-notifications,
a WOT client would be implemented by periodically polling WOT for identities /
trusts / scores. This caused a lot of database queries and made everything
slow and laggy.
With event-notifications, clients of WOT subscribe to types of objects which
they are interested in: Identities / Trusts / Scores / and in the future
introduction puzzles. WOT will then send all known objects at time of
subscripion once, and afterwards keep the client up to date by only sending
single objects as they are changed (= as an event happens). This causes
database
and network traffic only to happen when there is an actual need for it.
I originally wanted to link you to the JavaDoc but we currently do not have a
proper way of auto-generating it on a webserver.
I had a better idea though: The end of this mail will contain a dump of the
FCP traffic between a client of event-notifications and WOT. So you can have
a look at how the communication typically looks.
Before that, there will be a copy-pasta of the JavaDoc of the "Subscribe" FCP
function - this is the initial function which enables event-notifications. Its
JavaDoc will give you a rough idea of how to interpret the following FCP dump.
NOTICE: Even though by this mail significant effort is being spent on making
FCP
easy to use by client authors, you should only implement an actual FCP client
as a last resort: I've done the job of implementing a Java class
"FCPClientReferenceImplementation" which serves the purpose of providing a
reference client to event-notifications. This took around 3 weeks, is ~1000
lines and very thoroughly tested. Please use it.
FCP "Subscribe" JavaDoc (removed some uninteresting parts):
------------------------------------------------------------------------------
Processes the "Subscribe" FCP message, filing a {@link Subscription} to
event-{@link Notification}s via {@link SubscriptionManager}.
Required fields:
"To" = "Identities" | "Trusts" | "Scores" - chooses among {@link
IdentitiesSubscription} / {@link TrustsSubscription} /
{@link ScoresSubscription}.
Reply:
The reply consists of two separate FCP messages:
The first message is "Message" = "Identities" | "Trusts" | "Scores".
It contains the full dataset of the type you have subscribed to.
By storing this dataset, your client is completely synchronized with WOT. Upon
changes of anything, WOT will only have to send
the single {@link Identity}/{@link Trust}/{@link Score} object which has
changed for your client to be fully synchronized again.
This message is send via the synchronous FCP-API: You can signal that
processing it failed by returning an error in the FCP message processor. This
allows your client to be programmed in a transactional style: If part of the
transaction which
stores the dataset fails, you can just roll it back and signal the error to
WOT. It will rollback the subscription then and
send an "Error" message, indicating that subscribing failed. You must file
another subscription attempt then.
The second message is formatted as:
"Message" = "Subscribed"
"SubscriptionID" = Random {@link UUID} of the Subscription.
"To" = Same as the "To" field of your original message.
Errors:
If you are already subscribed to the selected type, you will only receive a
message:
"Message" = "Error"
"Description" =
"plugins.WebOfTrust.SubscriptionManager$SubscriptionExistsAlreadyException"
"SubscriptionID" = Same as in the original "Subscribed" message
"To" = Same as you requested
"OriginalMessage" = "Subscribe"
{@link Notification}s:
Further messages will be sent at any time in the future if an {@link
Identity} / {@link Trust} / {@link Score}
object has changed. They will contain the version of the object before the
change and after the change.
These messages are also send with the synchronous FCP API. In opposite to the
initial synchronization message, by replying with failure to the synchronous
FCP call, you can signal that you want to receive the same notification again.
After a typical delay of {@link
SubscriptionManager#PROCESS_NOTIFICATIONS_DELAY}, it will be re-sent.
There is a maximal amount of {@link
SubscriptionManager#DISCONNECT_CLIENT_AFTER_FAILURE_COUNT} failures per FCP-
Client.
If you exceed this limit, your subscriptions will be terminated. You will
receive an "Unsubscribed" message then as long as your client has not
terminated the FCP connection. See {@link #handleUnsubscribe(SimpleFieldSet)}.
The fact that you can request a notification to be re-sent may also be used to
program your client in a transactional style.
If the transaction which processes an event-notification fails, you can
indicate failure to the synchronous FCP sender and
WOT will then re-send the notification, causing the transaction to be retried.
If your client is shutting down or not interested in the subscription anymore,
you should send an "Unsubscribe" message.
See {@link #handleUnsubscribe(SimpleFieldSet)}. This will make sure that WOT
stops gathering data for your subscription,
which would be expensive to do if its not even needed. But if you cannot send
the message anymore due to a dropped connection,
the subscription will be terminated automatically after some time due to
notification-deployment failing. Nevertheless,
please always unsubscribe when possible.
------------------------------------------------------------------------------
FCP dump of a typical connection which subscribes to all types of objects::
(Notice that the duplicate fields are for backwards compatibility with old
clients.
They are present even in event-notifications because the functions for
generating
FCP data are re-used in different areas of code.)
------------------------------------------------------------------------------
---------------- Fri Oct 25 02:14:07 CEST 2013 Connected. ----------------
---------------- Fri Oct 25 02:14:07 CEST 2013 Sent: ----------------
Message=Subscribe
To=Identities
End
---------------- Fri Oct 25 02:14:08 CEST 2013 Received: ----------------
Message=Identities
Identities.Amount=5
Identities.0.CurrentEditionFetchState=NotFetched
Identities.0.ID=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
Identities.0.Identity=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
Identities.0.PublishesTrustList=true
Identities.0.RequestURI=USK@QeTBVWTwBldfI-
lrF~xf0nqFVDdQoSUghT~PvhyJ1NE,OjEywGD063La2H-
IihD7iYtZm3rC0BP6UTvvwyF5Zh4,AQACAAE/WebOfTrust/1344
Identities.0.Type=Identity
Identities.0.Contexts.Amount=0
Identities.0.Properties.Amount=0
Identities.1.CurrentEditionFetchState=NotFetched
Identities.1.ID=D3MrAR-AVMqKJRjXnpKW2guW9z1mw5GZ9BB15mYVkVc
Identities.1.Identity=D3MrAR-AVMqKJRjXnpKW2guW9z1mw5GZ9BB15mYVkVc
Identities.1.PublishesTrustList=true
Identities.1.RequestURI=USK@D3MrAR-
AVMqKJRjXnpKW2guW9z1mw5GZ9BB15mYVkVc,xgddjFHx2S~5U6PeFkwqO5V~1gZngFLoM-
xaoMKSBI8,AQACAAE/WebOfTrust/4959
Identities.1.Type=Identity
Identities.1.Contexts.Amount=0
Identities.1.Properties.Amount=0
Identities.2.CurrentEditionFetchState=NotFetched
Identities.2.ID=s88mAwLB3OW6mYlZ43XaHDM1K6QXosZ4QTt2UX-hq6s
Identities.2.Identity=s88mAwLB3OW6mYlZ43XaHDM1K6QXosZ4QTt2UX-hq6s
Identities.2.PublishesTrustList=true
Identities.2.RequestURI=USK@s88mAwLB3OW6mYlZ43XaHDM1K6QXosZ4QTt2UX-
hq6s,555tpw1TUReXUixAMDQD3RcD6gUKwOBCDQ6Dot2v6qg,AQACAAE/WebOfTrust/5
Identities.2.Type=Identity
Identities.2.Contexts.Amount=0
Identities.2.Properties.Amount=0
Identities.3.CurrentEditionFetchState=NotFetched
Identities.3.ID=z9dv7wqsxIBCiFLW7VijMGXD9Gl-EXAqBAwzQ4aq26s
Identities.3.Identity=z9dv7wqsxIBCiFLW7VijMGXD9Gl-EXAqBAwzQ4aq26s
Identities.3.PublishesTrustList=true
Identities.3.RequestURI=USK@z9dv7wqsxIBCiFLW7VijMGXD9Gl-
EXAqBAwzQ4aq26s,4Uvc~Fjw3i9toGeQuBkDARUV5mF7OTKoAhqOA9LpNdo,AQACAAE/WebOfTrust/1270
Identities.3.Type=Identity
Identities.3.Contexts.Amount=0
Identities.3.Properties.Amount=0
Identities.4.CurrentEditionFetchState=NotFetched
Identities.4.ID=o2~q8EMoBkCNEgzLUL97hLPdddco9ix1oAnEa~VzZtg
Identities.4.Identity=o2~q8EMoBkCNEgzLUL97hLPdddco9ix1oAnEa~VzZtg
Identities.4.PublishesTrustList=true
Identities.4.RequestURI=USK@o2~q8EMoBkCNEgzLUL97hLPdddco9ix1oAnEa~VzZtg,X~vTpL2LSyKvwQoYBx~eleI2RF6QzYJpzuenfcKDKBM,AQACAAE/WebOfTrust/9379
Identities.4.Type=Identity
Identities.4.Contexts.Amount=0
Identities.4.Properties.Amount=0
End
---------------- Fri Oct 25 02:14:08 CEST 2013 Received: ----------------
Message=Subscribed
SubscriptionID=19b22c4e-b902-4e1a-8dfd-704499ce3fe2
To=Identities
End
---------------- Fri Oct 25 02:14:08 CEST 2013 Sent: ----------------
Message=Subscribe
To=Trusts
End
---------------- Fri Oct 25 02:14:08 CEST 2013 Received: ----------------
Message=Trusts
Trusts.Amount=0
End
---------------- Fri Oct 25 02:14:08 CEST 2013 Received: ----------------
Message=Subscribed
SubscriptionID=c27ef403-2550-41be-bb35-42c5886729f5
To=Trusts
End
---------------- Fri Oct 25 02:14:08 CEST 2013 Sent: ----------------
Message=Subscribe
To=Scores
End
---------------- Fri Oct 25 02:14:08 CEST 2013 Received: ----------------
Message=Scores
Scores.Amount=0
End
---------------- Fri Oct 25 02:14:08 CEST 2013 Received: ----------------
Message=Subscribed
SubscriptionID=031f7f79-3487-455b-9a91-78cec7e72d79
To=Scores
End
---------------- Fri Oct 25 02:15:20 CEST 2013 Received: ----------------
Message=IdentityChangedNotification
AfterChange.Context0=Introduction
AfterChange.CurrentEditionFetchState=Fetched
AfterChange.CurrentEditionFetchState0=Fetched
AfterChange.ID=WNOyZsnZtpFjwmwfVBqC1PhSeg-hErXHlkrR43h0tiU
AfterChange.ID0=WNOyZsnZtpFjwmwfVBqC1PhSeg-hErXHlkrR43h0tiU
AfterChange.Identity=WNOyZsnZtpFjwmwfVBqC1PhSeg-hErXHlkrR43h0tiU
AfterChange.Identity0=WNOyZsnZtpFjwmwfVBqC1PhSeg-hErXHlkrR43h0tiU
AfterChange.InsertURI=USK@AILRi~9nfD2pesTkeDvwZxe3cRmkY7Q00CUxQyUOVW-
H,GzEIwcFQ78J7-RCzxgvY4Pfq0T8Lm4v0BazjMtkqT~8,AQECAAE/WebOfTrust/0
AfterChange.InsertURI0=USK@AILRi~9nfD2pesTkeDvwZxe3cRmkY7Q00CUxQyUOVW-
H,GzEIwcFQ78J7-RCzxgvY4Pfq0T8Lm4v0BazjMtkqT~8,AQECAAE/WebOfTrust/0
AfterChange.Nickname=Alexandre_Umpleby
AfterChange.Nickname0=Alexandre_Umpleby
AfterChange.PublishesTrustList=true
AfterChange.PublishesTrustList0=true
AfterChange.RequestURI=USK@WNOyZsnZtpFjwmwfVBqC1PhSeg-
hErXHlkrR43h0tiU,GzEIwcFQ78J7-
RCzxgvY4Pfq0T8Lm4v0BazjMtkqT~8,AQACAAE/WebOfTrust/0
AfterChange.RequestURI0=USK@WNOyZsnZtpFjwmwfVBqC1PhSeg-
hErXHlkrR43h0tiU,GzEIwcFQ78J7-
RCzxgvY4Pfq0T8Lm4v0BazjMtkqT~8,AQACAAE/WebOfTrust/0
AfterChange.Type=OwnIdentity
AfterChange.Type0=OwnIdentity
AfterChange.Contexts.Amount=1
AfterChange.Contexts.0.Name=Introduction
AfterChange.Contexts0.Amount=1
AfterChange.Contexts0.Context0=Introduction
AfterChange.Identities.Amount=1
AfterChange.Identities.0.Context0=Introduction
AfterChange.Identities.0.CurrentEditionFetchState=Fetched
AfterChange.Identities.0.ID=WNOyZsnZtpFjwmwfVBqC1PhSeg-hErXHlkrR43h0tiU
AfterChange.Identities.0.Identity=WNOyZsnZtpFjwmwfVBqC1PhSeg-hErXHlkrR43h0tiU
AfterChange.Identities.0.InsertURI=USK@AILRi~9nfD2pesTkeDvwZxe3cRmkY7Q00CUxQyUOVW-
H,GzEIwcFQ78J7-RCzxgvY4Pfq0T8Lm4v0BazjMtkqT~8,AQECAAE/WebOfTrust/0
AfterChange.Identities.0.Nickname=Alexandre_Umpleby
AfterChange.Identities.0.PublishesTrustList=true
AfterChange.Identities.0.RequestURI=USK@WNOyZsnZtpFjwmwfVBqC1PhSeg-
hErXHlkrR43h0tiU,GzEIwcFQ78J7-
RCzxgvY4Pfq0T8Lm4v0BazjMtkqT~8,AQACAAE/WebOfTrust/0
AfterChange.Identities.0.Type=OwnIdentity
AfterChange.Identities.0.Contexts.Amount=1
AfterChange.Identities.0.Contexts.0.Name=Introduction
AfterChange.Identities.0.Properties.Amount=1
AfterChange.Identities.0.Properties.0.Name=IntroductionPuzzleCount
AfterChange.Identities.0.Properties.0.Value=10
AfterChange.Identities.0.Property0.Name=IntroductionPuzzleCount
AfterChange.Identities.0.Property0.Value=10
AfterChange.Properties.Amount=1
AfterChange.Properties.0.Name=IntroductionPuzzleCount
AfterChange.Properties.0.Value=10
AfterChange.Properties0.Amount=1
AfterChange.Properties0.Property0.Name=IntroductionPuzzleCount
AfterChange.Properties0.Property0.Value=10
AfterChange.Property0.Name=IntroductionPuzzleCount
AfterChange.Property0.Value=10
BeforeChange.Type=Inexistent
BeforeChange.Type0=Inexistent
BeforeChange.Identities.0.Type=Inexistent
End
---------------- Fri Oct 25 02:15:21 CEST 2013 Received: ----------------
Message=ScoreChangedNotification
AfterChange.Scores.Amount=1
AfterChange.Scores.0.Capacity=100
AfterChange.Scores.0.Rank=0
AfterChange.Scores.0.Trustee=WNOyZsnZtpFjwmwfVBqC1PhSeg-hErXHlkrR43h0tiU
AfterChange.Scores.0.Truster=WNOyZsnZtpFjwmwfVBqC1PhSeg-hErXHlkrR43h0tiU
AfterChange.Scores.0.Value=2147483647
BeforeChange.Scores.0.Value=Inexistent
End
---------------- Fri Oct 25 02:15:21 CEST 2013 Received: ----------------
Message=TrustChangedNotification
AfterChange.Trusts.Amount=1
AfterChange.Trusts.0.Comment=Automatically assigned trust to a seed identity.
AfterChange.Trusts.0.Trustee=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
AfterChange.Trusts.0.Truster=WNOyZsnZtpFjwmwfVBqC1PhSeg-hErXHlkrR43h0tiU
AfterChange.Trusts.0.TrusterEdition=0
AfterChange.Trusts.0.Value=100
BeforeChange.Trusts.0.Value=Inexistent
End
---------------- Fri Oct 25 02:15:21 CEST 2013 Received: ----------------
Message=TrustChangedNotification
AfterChange.Trusts.Amount=1
AfterChange.Trusts.0.Comment=Automatically assigned trust to a seed identity.
AfterChange.Trusts.0.Trustee=z9dv7wqsxIBCiFLW7VijMGXD9Gl-EXAqBAwzQ4aq26s
AfterChange.Trusts.0.Truster=WNOyZsnZtpFjwmwfVBqC1PhSeg-hErXHlkrR43h0tiU
AfterChange.Trusts.0.TrusterEdition=0
AfterChange.Trusts.0.Value=100
BeforeChange.Trusts.0.Value=Inexistent
End
---------------- Fri Oct 25 02:15:21 CEST 2013 Received: ----------------
Message=TrustChangedNotification
AfterChange.Trusts.Amount=1
AfterChange.Trusts.0.Comment=Automatically assigned trust to a seed identity.
AfterChange.Trusts.0.Trustee=o2~q8EMoBkCNEgzLUL97hLPdddco9ix1oAnEa~VzZtg
AfterChange.Trusts.0.Truster=WNOyZsnZtpFjwmwfVBqC1PhSeg-hErXHlkrR43h0tiU
AfterChange.Trusts.0.TrusterEdition=0
AfterChange.Trusts.0.Value=100
BeforeChange.Trusts.0.Value=Inexistent
End
---------------- Fri Oct 25 02:15:21 CEST 2013 Received: ----------------
Message=TrustChangedNotification
AfterChange.Trusts.Amount=1
AfterChange.Trusts.0.Comment=Automatically assigned trust to a seed identity.
AfterChange.Trusts.0.Trustee=D3MrAR-AVMqKJRjXnpKW2guW9z1mw5GZ9BB15mYVkVc
AfterChange.Trusts.0.Truster=WNOyZsnZtpFjwmwfVBqC1PhSeg-hErXHlkrR43h0tiU
AfterChange.Trusts.0.TrusterEdition=0
AfterChange.Trusts.0.Value=100
BeforeChange.Trusts.0.Value=Inexistent
End
---------------- Fri Oct 25 02:15:21 CEST 2013 Received: ----------------
Message=TrustChangedNotification
AfterChange.Trusts.Amount=1
AfterChange.Trusts.0.Comment=Automatically assigned trust to a seed identity.
AfterChange.Trusts.0.Trustee=s88mAwLB3OW6mYlZ43XaHDM1K6QXosZ4QTt2UX-hq6s
AfterChange.Trusts.0.Truster=WNOyZsnZtpFjwmwfVBqC1PhSeg-hErXHlkrR43h0tiU
AfterChange.Trusts.0.TrusterEdition=0
AfterChange.Trusts.0.Value=100
BeforeChange.Trusts.0.Value=Inexistent
End
---------------- Fri Oct 25 02:15:21 CEST 2013 Received: ----------------
Message=ScoreChangedNotification
AfterChange.Scores.Amount=1
AfterChange.Scores.0.Capacity=40
AfterChange.Scores.0.Rank=1
AfterChange.Scores.0.Trustee=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
AfterChange.Scores.0.Truster=WNOyZsnZtpFjwmwfVBqC1PhSeg-hErXHlkrR43h0tiU
AfterChange.Scores.0.Value=100
BeforeChange.Scores.0.Value=Inexistent
End
---------------- Fri Oct 25 02:15:21 CEST 2013 Received: ----------------
Message=IdentityChangedNotification
AfterChange.CurrentEditionFetchState=NotFetched
AfterChange.CurrentEditionFetchState0=NotFetched
AfterChange.ID=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
AfterChange.ID0=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
AfterChange.Identity=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
AfterChange.Identity0=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
AfterChange.PublishesTrustList=true
AfterChange.PublishesTrustList0=true
AfterChange.RequestURI=USK@QeTBVWTwBldfI-
lrF~xf0nqFVDdQoSUghT~PvhyJ1NE,OjEywGD063La2H-
IihD7iYtZm3rC0BP6UTvvwyF5Zh4,AQACAAE/WebOfTrust/1343
AfterChange.RequestURI0=USK@QeTBVWTwBldfI-
lrF~xf0nqFVDdQoSUghT~PvhyJ1NE,OjEywGD063La2H-
IihD7iYtZm3rC0BP6UTvvwyF5Zh4,AQACAAE/WebOfTrust/1343
AfterChange.Type=Identity
AfterChange.Type0=Identity
AfterChange.Contexts.Amount=0
AfterChange.Contexts0.Amount=0
AfterChange.Identities.Amount=1
AfterChange.Identities.0.CurrentEditionFetchState=NotFetched
AfterChange.Identities.0.ID=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
AfterChange.Identities.0.Identity=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
AfterChange.Identities.0.PublishesTrustList=true
AfterChange.Identities.0.RequestURI=USK@QeTBVWTwBldfI-
lrF~xf0nqFVDdQoSUghT~PvhyJ1NE,OjEywGD063La2H-
IihD7iYtZm3rC0BP6UTvvwyF5Zh4,AQACAAE/WebOfTrust/1343
AfterChange.Identities.0.Type=Identity
AfterChange.Identities.0.Contexts.Amount=0
AfterChange.Identities.0.Properties.Amount=0
AfterChange.Properties.Amount=0
AfterChange.Properties0.Amount=0
BeforeChange.CurrentEditionFetchState=NotFetched
BeforeChange.CurrentEditionFetchState0=NotFetched
BeforeChange.ID=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
BeforeChange.ID0=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
BeforeChange.Identity=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
BeforeChange.Identity0=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
BeforeChange.PublishesTrustList=true
BeforeChange.PublishesTrustList0=true
BeforeChange.RequestURI=USK@QeTBVWTwBldfI-
lrF~xf0nqFVDdQoSUghT~PvhyJ1NE,OjEywGD063La2H-
IihD7iYtZm3rC0BP6UTvvwyF5Zh4,AQACAAE/WebOfTrust/1344
BeforeChange.RequestURI0=USK@QeTBVWTwBldfI-
lrF~xf0nqFVDdQoSUghT~PvhyJ1NE,OjEywGD063La2H-
IihD7iYtZm3rC0BP6UTvvwyF5Zh4,AQACAAE/WebOfTrust/1344
BeforeChange.Type=Identity
BeforeChange.Type0=Identity
BeforeChange.Contexts.Amount=0
BeforeChange.Contexts0.Amount=0
BeforeChange.Identities.Amount=1
BeforeChange.Identities.0.CurrentEditionFetchState=NotFetched
BeforeChange.Identities.0.ID=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
BeforeChange.Identities.0.Identity=QeTBVWTwBldfI-lrF~xf0nqFVDdQoSUghT~PvhyJ1NE
BeforeChange.Identities.0.PublishesTrustList=true
BeforeChange.Identities.0.RequestURI=USK@QeTBVWTwBldfI-
lrF~xf0nqFVDdQoSUghT~PvhyJ1NE,OjEywGD063La2H-
IihD7iYtZm3rC0BP6UTvvwyF5Zh4,AQACAAE/WebOfTrust/1344
BeforeChange.Identities.0.Type=Identity
BeforeChange.Identities.0.Contexts.Amount=0
BeforeChange.Identities.0.Properties.Amount=0
BeforeChange.Properties.Amount=0
BeforeChange.Properties0.Amount=0
End
---------------- Fri Oct 25 02:15:21 CEST 2013 Received: ----------------
Message=ScoreChangedNotification
AfterChange.Scores.Amount=1
AfterChange.Scores.0.Capacity=40
AfterChange.Scores.0.Rank=1
AfterChange.Scores.0.Trustee=D3MrAR-AVMqKJRjXnpKW2guW9z1mw5GZ9BB15mYVkVc
AfterChange.Scores.0.Truster=WNOyZsnZtpFjwmwfVBqC1PhSeg-hErXHlkrR43h0tiU
AfterChange.Scores.0.Value=100
BeforeChange.Scores.0.Value=Inexistent
End
---------------- Fri Oct 25 02:43:57 CEST 2013 Sent: ----------------
Message=Unsubscribe
SubscriptionID=19b22c4e-b902-4e1a-8dfd-704499ce3fe2
End
---------------- Fri Oct 25 02:43:57 CEST 2013 Sent: ----------------
Message=Unsubscribe
SubscriptionID=c27ef403-2550-41be-bb35-42c5886729f5
End
---------------- Fri Oct 25 02:43:57 CEST 2013 Sent: ----------------
Message=Unsubscribe
SubscriptionID=031f7f79-3487-455b-9a91-78cec7e72d79
End
---------------- Fri Oct 25 02:43:57 CEST 2013 Received: ----------------
From=Identities
Message=Unsubscribed
SubscriptionID=19b22c4e-b902-4e1a-8dfd-704499ce3fe2
End
---------------- Fri Oct 25 02:43:57 CEST 2013 Received: ----------------
From=Scores
Message=Unsubscribed
SubscriptionID=031f7f79-3487-455b-9a91-78cec7e72d79
End
---------------- Fri Oct 25 02:43:57 CEST 2013 Received: ----------------
From=Trusts
Message=Unsubscribed
SubscriptionID=c27ef403-2550-41be-bb35-42c5886729f5
End
---------------- Fri Oct 25 02:44:00 CEST 2013 Disconnected. ----------------
------------------------------------------------------------------------------
_______________________________________________
Devl mailing list
[email protected]
https://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl