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