mirror of https://github.com/zlatinb/muwire
wip on end-to-end flow
parent
f5bc2b8529
commit
1af12e3743
|
@ -692,7 +692,7 @@ class ConnectionAcceptor {
|
|||
throw new Exception("invalid ETTER")
|
||||
|
||||
Map<String,String> headers = DataUtil.readAllHeaders(dis)
|
||||
if (headers['Version'] != 1)
|
||||
if (headers['Version'] != "1")
|
||||
throw new Exception("unrecognized version")
|
||||
int count = Integer.parseInt(headers['Count'])
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ class MWMessage {
|
|||
this.timestamp = timestamp
|
||||
this.attachments = attachments
|
||||
this.recipients = recipients
|
||||
this.body = body
|
||||
|
||||
byte [] signablePayload = signablePayload()
|
||||
Signature signature = DSAEngine.getInstance().sign(signablePayload, spk)
|
||||
|
@ -107,7 +108,7 @@ class MWMessage {
|
|||
byte [] signable = signablePayload()
|
||||
def spk = sender.destination.getSigningPublicKey()
|
||||
def signature = new Signature(spk.getType(), sig)
|
||||
DSAEngine.getInstance().verifySig(signature, signable, spk)
|
||||
DSAEngine.getInstance().verifySignature(signature, signable, spk)
|
||||
}
|
||||
|
||||
private byte [] getPayload() {
|
||||
|
|
|
@ -8,6 +8,7 @@ import java.util.concurrent.ExecutorService
|
|||
import java.util.concurrent.Executors
|
||||
import java.util.concurrent.ThreadFactory
|
||||
import java.util.logging.Level
|
||||
import java.util.zip.GZIPOutputStream
|
||||
|
||||
import com.muwire.core.EventBus
|
||||
import com.muwire.core.MuWireSettings
|
||||
|
@ -116,13 +117,14 @@ class Messenger {
|
|||
String name = deriveName(message)
|
||||
File f = new File(outbox, name)
|
||||
File target = new File(sent, name)
|
||||
Files.move(f.toPath(), target.toPath(), StandardCopyOption.ATOMIC_MOVE)
|
||||
Files.move(f.toPath(), target.toPath(), StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING)
|
||||
eventBus.publish(new MessageSentEvent(message : message))
|
||||
log.fine("moved message to ${message.recipients} to sent folder")
|
||||
}
|
||||
|
||||
private static String deriveName(MWMessage message) {
|
||||
String ih = Base64.encode(message.getInfoHash().getRoot())
|
||||
"${ih}_${message.sender.getHumanReadableName()}_${message.timestamp}"
|
||||
"${ih}_${message.sender.getHumanReadableName()}_${message.timestamp}.mwmessage"
|
||||
}
|
||||
|
||||
private synchronized void send() {
|
||||
|
@ -132,7 +134,7 @@ class Messenger {
|
|||
if (inProcess.contains(candidate))
|
||||
continue
|
||||
inProcess.add(candidate)
|
||||
netIO.execute(deliver(candidate))
|
||||
netIO.execute({deliver(candidate)})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -161,13 +163,16 @@ class Messenger {
|
|||
try {
|
||||
Endpoint e = connector.connect(recipient.destination)
|
||||
OutputStream os = e.getOutputStream()
|
||||
os.write("ETTER\r\n".getBytes(StandardCharsets.US_ASCII))
|
||||
os.write("LETTER\r\n".getBytes(StandardCharsets.US_ASCII))
|
||||
os.write("Version:1\r\n".getBytes(StandardCharsets.US_ASCII))
|
||||
os.write("Count:1\r\n".getBytes(StandardCharsets.US_ASCII))
|
||||
os.write("\r\n".getBytes(StandardCharsets.US_ASCII))
|
||||
os = new GZIPOutputStream(os)
|
||||
message.write(os)
|
||||
os.flush()
|
||||
os.close()
|
||||
try {
|
||||
os.close()
|
||||
} catch (Exception ignore) {}
|
||||
return true
|
||||
} catch (Exception e) {
|
||||
log.log(Level.WARNING, "failed to send message to ${recipient.getHumanReadableName()}", e)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.muwire.core.messenger
|
||||
|
||||
class UIMessageEvent extends MWMessage {
|
||||
import com.muwire.core.Event
|
||||
|
||||
class UIMessageEvent extends Event {
|
||||
MWMessage message
|
||||
}
|
||||
|
|
|
@ -794,6 +794,7 @@ class MainFrameController {
|
|||
|
||||
def params = [:]
|
||||
params.recipient = te.persona
|
||||
params.core = core
|
||||
mvcGroup.createMVCGroup("new-message", UUID.randomUUID().toString(), params)
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,10 @@ import griffon.inject.MVCMember
|
|||
import griffon.metadata.ArtifactProviderFor
|
||||
import javax.annotation.Nonnull
|
||||
|
||||
import com.muwire.core.Persona
|
||||
import com.muwire.core.messenger.MWMessage
|
||||
import com.muwire.core.messenger.UIMessageEvent
|
||||
|
||||
@ArtifactProviderFor(GriffonController)
|
||||
class NewMessageController {
|
||||
@MVCMember @Nonnull
|
||||
|
@ -15,7 +19,15 @@ class NewMessageController {
|
|||
|
||||
@ControllerAction
|
||||
void send() {
|
||||
Set<Persona> recipients = new HashSet<>()
|
||||
recipients.add(model.recipient)
|
||||
MWMessage message = new MWMessage(model.core.me, recipients, view.subjectField.text,
|
||||
System.currentTimeMillis(), view.bodyArea.getText(), Collections.emptySet(), model.core.spk)
|
||||
model.core.eventBus.publish(new UIMessageEvent(message : message))
|
||||
|
||||
application.mvcGroupManager.groups["MainFrame"].model.addToOutbox(message)
|
||||
|
||||
cancel()
|
||||
}
|
||||
|
||||
@ControllerAction
|
||||
|
|
|
@ -833,6 +833,15 @@ class MainFrameModel {
|
|||
}
|
||||
}
|
||||
|
||||
void addToOutbox(MWMessage message) {
|
||||
messageHeadersMap.get(OUTBOX).add(message)
|
||||
if (folderIdx == OUTBOX) {
|
||||
messageHeaders.clear()
|
||||
messageHeaders.addAll(messageHeadersMap.get(OUTBOX))
|
||||
view.messageHeaderTable.model.fireTableDataChanged()
|
||||
}
|
||||
}
|
||||
|
||||
void onMessageLoadedEvent(MessageLoadedEvent e) {
|
||||
runInsideUIAsync {
|
||||
int idx = 0
|
||||
|
@ -844,7 +853,7 @@ class MainFrameModel {
|
|||
throw new IllegalStateException("unknown folder $e.folder")
|
||||
|
||||
}
|
||||
|
||||
|
||||
messageHeadersMap.get(idx).add(e.message)
|
||||
if (idx == folderIdx) {
|
||||
messageHeaders.clear()
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
package com.muwire.gui
|
||||
|
||||
import com.muwire.core.Core
|
||||
import com.muwire.core.EventBus
|
||||
import com.muwire.core.Persona
|
||||
import com.muwire.core.messenger.MWMessage
|
||||
|
||||
import griffon.core.artifact.GriffonModel
|
||||
import griffon.transform.Observable
|
||||
import net.i2p.data.SigningPrivateKey
|
||||
import griffon.metadata.ArtifactProviderFor
|
||||
|
||||
@ArtifactProviderFor(GriffonModel)
|
||||
class NewMessageModel {
|
||||
Core core
|
||||
MWMessage reply
|
||||
Persona recipient
|
||||
}
|
|
@ -1244,6 +1244,7 @@ class MainFrameView {
|
|||
messageHeaderTable.model.fireTableDataChanged()
|
||||
})
|
||||
|
||||
messageHeaderTable.setDefaultRenderer(Long.class, new DateRenderer())
|
||||
messageHeaderTable.rowSorter.addRowSorterListener({evt -> lastMessageHeaderTableSortEvent = evt})
|
||||
messageHeaderTable.rowSorter.setSortsOnUpdates(true)
|
||||
selectionModel = messageHeaderTable.getSelectionModel()
|
||||
|
|
Loading…
Reference in New Issue