@@ -146,12 +146,12 @@ class OutgoingMessages
146
146
private readonly CancellationToken Token ;
147
147
private readonly SignalLibHandle Handle ;
148
148
private readonly SignalStore Store ;
149
- private readonly Task < SignalServiceMessagePipe > CreatePipeTask ;
149
+ private readonly SignalServiceMessagePipe Pipe ;
150
150
151
- public OutgoingMessages ( CancellationToken token , Task < SignalServiceMessagePipe > createPipeTask , SignalStore store , SignalLibHandle handle )
151
+ public OutgoingMessages ( CancellationToken token , SignalServiceMessagePipe pipe , SignalStore store , SignalLibHandle handle )
152
152
{
153
153
Token = token ;
154
- CreatePipeTask = createPipeTask ;
154
+ Pipe = pipe ;
155
155
Store = store ;
156
156
Handle = handle ;
157
157
}
@@ -161,60 +161,55 @@ public async Task HandleOutgoingMessages()
161
161
Logger . LogDebug ( "HandleOutgoingMessages()" ) ;
162
162
try
163
163
{
164
- await CreatePipeTask ;
165
- await Task . Run ( async ( ) =>
164
+ var messageSender = new SignalServiceMessageSender ( Token , LibUtils . ServiceConfiguration , Store . Username , Store . Password , ( int ) Store . DeviceId , new Store ( ) , Pipe , null , LibUtils . USER_AGENT ) ;
165
+ while ( ! Token . IsCancellationRequested )
166
166
{
167
- var pipe = await CreatePipeTask ;
168
- var messageSender = new SignalServiceMessageSender ( Token , LibUtils . ServiceConfiguration , Store . Username , Store . Password , ( int ) Store . DeviceId , new Store ( ) , pipe , null , LibUtils . USER_AGENT ) ;
169
- while ( ! Token . IsCancellationRequested )
167
+ ISendable sendable = null ;
168
+ try
170
169
{
171
- ISendable sendable = null ;
172
- try
173
- {
174
- sendable = Handle . OutgoingQueue . Take ( Token ) ;
175
- Logger . LogTrace ( $ "Sending { sendable . GetType ( ) . Name } ") ;
176
- await sendable . Send ( messageSender , Token ) ;
177
- }
178
- catch ( OperationCanceledException ) { return ; }
179
- catch ( EncapsulatedExceptions exceptions )
180
- {
181
- sendable . Status = SignalMessageStatus . Confirmed ;
182
- Logger . LogError ( "HandleOutgoingMessages() encountered libsignal exceptions" ) ;
183
- IList < UntrustedIdentityException > identityExceptions = exceptions . UntrustedIdentityExceptions ;
184
- if ( exceptions . NetworkExceptions . Count > 0 )
185
- {
186
- sendable . Status = SignalMessageStatus . Failed_Network ;
187
- }
188
- if ( identityExceptions . Count > 0 )
189
- {
190
- sendable . Status = SignalMessageStatus . Failed_Identity ;
191
- }
192
- foreach ( UntrustedIdentityException e in identityExceptions )
193
- {
194
- await Handle . HandleOutgoingKeyChangeLocked ( e . E164number , Base64 . EncodeBytes ( e . IdentityKey . serialize ( ) ) ) ;
195
- }
196
- }
197
- catch ( RateLimitException )
170
+ sendable = Handle . OutgoingQueue . Take ( Token ) ;
171
+ Logger . LogTrace ( $ "Sending { sendable . GetType ( ) . Name } ") ;
172
+ await sendable . Send ( messageSender , Token ) ;
173
+ }
174
+ catch ( OperationCanceledException ) { return ; }
175
+ catch ( EncapsulatedExceptions exceptions )
176
+ {
177
+ sendable . Status = SignalMessageStatus . Confirmed ;
178
+ Logger . LogError ( "HandleOutgoingMessages() encountered libsignal exceptions" ) ;
179
+ IList < UntrustedIdentityException > identityExceptions = exceptions . UntrustedIdentityExceptions ;
180
+ if ( exceptions . NetworkExceptions . Count > 0 )
198
181
{
199
- Logger . LogError ( "HandleOutgoingMessages() could not send due to rate limits" ) ;
200
- sendable . Status = SignalMessageStatus . Failed_Ratelimit ;
182
+ sendable . Status = SignalMessageStatus . Failed_Network ;
201
183
}
202
- catch ( UntrustedIdentityException e )
184
+ if ( identityExceptions . Count > 0 )
203
185
{
204
- Logger . LogError ( "HandleOutgoingMessages() could not send due to untrusted identities" ) ;
205
186
sendable . Status = SignalMessageStatus . Failed_Identity ;
206
- await Handle . HandleOutgoingKeyChangeLocked ( e . E164number , Base64 . EncodeBytes ( e . IdentityKey . serialize ( ) ) ) ;
207
187
}
208
- catch ( Exception e )
188
+ foreach ( UntrustedIdentityException e in identityExceptions )
209
189
{
210
- var line = new StackTrace ( e , true ) . GetFrames ( ) [ 0 ] . GetFileLineNumber ( ) ;
211
- Logger . LogError ( "HandleOutgoingMessages() failed in line {0}: {1}\n {2}" , line , e . Message , e . StackTrace ) ;
212
- sendable . Status = SignalMessageStatus . Failed_Unknown ;
190
+ await Handle . HandleOutgoingKeyChangeLocked ( e . E164number , Base64 . EncodeBytes ( e . IdentityKey . serialize ( ) ) ) ;
213
191
}
214
- await Handle . HandleMessageSentLocked ( sendable ) ;
215
192
}
216
- Logger . LogInformation ( "HandleOutgoingMessages() stopping: cancellation was requested" ) ;
217
- } ) ;
193
+ catch ( RateLimitException )
194
+ {
195
+ Logger . LogError ( "HandleOutgoingMessages() could not send due to rate limits" ) ;
196
+ sendable . Status = SignalMessageStatus . Failed_Ratelimit ;
197
+ }
198
+ catch ( UntrustedIdentityException e )
199
+ {
200
+ Logger . LogError ( "HandleOutgoingMessages() could not send due to untrusted identities" ) ;
201
+ sendable . Status = SignalMessageStatus . Failed_Identity ;
202
+ await Handle . HandleOutgoingKeyChangeLocked ( e . E164number , Base64 . EncodeBytes ( e . IdentityKey . serialize ( ) ) ) ;
203
+ }
204
+ catch ( Exception e )
205
+ {
206
+ var line = new StackTrace ( e , true ) . GetFrames ( ) [ 0 ] . GetFileLineNumber ( ) ;
207
+ Logger . LogError ( "HandleOutgoingMessages() failed in line {0}: {1}\n {2}" , line , e . Message , e . StackTrace ) ;
208
+ sendable . Status = SignalMessageStatus . Failed_Unknown ;
209
+ }
210
+ await Handle . HandleMessageSentLocked ( sendable ) ;
211
+ }
212
+ Logger . LogInformation ( "HandleOutgoingMessages() stopping: cancellation was requested" ) ;
218
213
}
219
214
catch ( OperationCanceledException )
220
215
{
0 commit comments