use of com.google.protobuf.InvalidProtocolBufferException in project Signal-Android by WhisperSystems.
the class GroupsV2AuthorizationSignalStoreCache method read.
@Override
@NonNull
public Map<Integer, AuthCredentialResponse> read() {
byte[] credentialBlob = store.getBlob(KEY, null);
if (credentialBlob == null) {
Log.i(TAG, "No credentials responses are cached locally");
return Collections.emptyMap();
}
try {
TemporalAuthCredentialResponses temporalCredentials = TemporalAuthCredentialResponses.parseFrom(credentialBlob);
HashMap<Integer, AuthCredentialResponse> result = new HashMap<>(temporalCredentials.getCredentialResponseCount());
for (TemporalAuthCredentialResponse credential : temporalCredentials.getCredentialResponseList()) {
result.put(credential.getDate(), new AuthCredentialResponse(credential.getAuthCredentialResponse().toByteArray()));
}
Log.i(TAG, String.format(Locale.US, "Loaded %d credentials from local storage", result.size()));
return result;
} catch (InvalidProtocolBufferException | InvalidInputException e) {
throw new AssertionError(e);
}
}
use of com.google.protobuf.InvalidProtocolBufferException in project Signal-Android by WhisperSystems.
the class WebSocketConnection method onMessage.
@Override
public synchronized void onMessage(WebSocket webSocket, ByteString payload) {
try {
WebSocketMessage message = WebSocketMessage.parseFrom(payload.toByteArray());
if (message.getType().getNumber() == WebSocketMessage.Type.REQUEST_VALUE) {
incomingRequests.add(message.getRequest());
} else if (message.getType().getNumber() == WebSocketMessage.Type.RESPONSE_VALUE) {
OutgoingRequest listener = outgoingRequests.remove(message.getResponse().getId());
if (listener != null) {
listener.onSuccess(new WebsocketResponse(message.getResponse().getStatus(), new String(message.getResponse().getBody().toByteArray()), message.getResponse().getHeadersList(), !credentialsProvider.isPresent()));
if (message.getResponse().getStatus() >= 400) {
healthMonitor.onMessageError(message.getResponse().getStatus(), credentialsProvider.isPresent());
}
} else if (keepAlives.remove(message.getResponse().getId())) {
healthMonitor.onKeepAliveResponse(message.getResponse().getId(), credentialsProvider.isPresent());
}
}
notifyAll();
} catch (InvalidProtocolBufferException e) {
warn(e);
}
}
use of com.google.protobuf.InvalidProtocolBufferException in project Signal-Android by WhisperSystems.
the class SignalServiceCipher method decrypt.
/**
* Decrypt a received {@link SignalServiceEnvelope}
*
* @param envelope The received SignalServiceEnvelope
*
* @return a decrypted SignalServiceContent
*/
public SignalServiceContent decrypt(SignalServiceEnvelope envelope) throws InvalidMetadataMessageException, InvalidMetadataVersionException, ProtocolInvalidKeyIdException, ProtocolLegacyMessageException, ProtocolUntrustedIdentityException, ProtocolNoSessionException, ProtocolInvalidVersionException, ProtocolInvalidMessageException, ProtocolInvalidKeyException, ProtocolDuplicateMessageException, SelfSendException, UnsupportedDataMessageException, InvalidMessageStructureException {
try {
if (envelope.hasLegacyMessage()) {
Plaintext plaintext = decrypt(envelope, envelope.getLegacyMessage());
SignalServiceProtos.DataMessage dataMessage = SignalServiceProtos.DataMessage.parseFrom(plaintext.getData());
SignalServiceContentProto contentProto = SignalServiceContentProto.newBuilder().setLocalAddress(SignalServiceAddressProtobufSerializer.toProtobuf(localAddress)).setMetadata(SignalServiceMetadataProtobufSerializer.toProtobuf(plaintext.metadata)).setLegacyDataMessage(dataMessage).build();
return SignalServiceContent.createFromProto(contentProto);
} else if (envelope.hasContent()) {
Plaintext plaintext = decrypt(envelope, envelope.getContent());
SignalServiceProtos.Content content = SignalServiceProtos.Content.parseFrom(plaintext.getData());
SignalServiceContentProto contentProto = SignalServiceContentProto.newBuilder().setLocalAddress(SignalServiceAddressProtobufSerializer.toProtobuf(localAddress)).setMetadata(SignalServiceMetadataProtobufSerializer.toProtobuf(plaintext.metadata)).setContent(content).build();
return SignalServiceContent.createFromProto(contentProto);
}
return null;
} catch (InvalidProtocolBufferException e) {
throw new InvalidMetadataMessageException(e);
}
}
use of com.google.protobuf.InvalidProtocolBufferException in project dubbo by alibaba.
the class ProtobufUtils method deserializeJson.
/* Protobuf json */
static <T> T deserializeJson(String json, Class<T> requestClass) throws InvalidProtocolBufferException {
Builder builder;
try {
builder = getMessageBuilder(requestClass);
} catch (Exception e) {
throw new IllegalArgumentException("Get google protobuf message builder from " + requestClass.getName() + "failed", e);
}
JsonFormat.parser().merge(json, builder);
return (T) builder.build();
}
use of com.google.protobuf.InvalidProtocolBufferException in project bagheera by mozilla-metrics.
the class KafkaConsumer method poll.
@Override
public void poll() {
final CountDownLatch latch = new CountDownLatch(streams.size());
for (final KafkaStream<Message> stream : streams) {
workers.add(executor.submit(new Callable<Void>() {
@Override
public Void call() {
try {
for (MessageAndMetadata<Message> mam : stream) {
BagheeraMessage bmsg = BagheeraMessage.parseFrom(ByteString.copyFrom(mam.message().payload()));
// get the sink for this message's namespace
// (typically only one sink unless a regex pattern was used to listen to multiple topics)
KeyValueSink sink = sinkFactory.getSink(bmsg.getNamespace());
if (sink == null) {
LOG.error("Could not obtain sink for namespace: " + bmsg.getNamespace());
break;
}
if (bmsg.getOperation() == Operation.CREATE_UPDATE && bmsg.hasId() && bmsg.hasPayload()) {
if (validationPipeline == null || validationPipeline.isValid(bmsg.getPayload().toByteArray())) {
if (bmsg.hasTimestamp()) {
sink.store(bmsg.getId(), bmsg.getPayload().toByteArray(), bmsg.getTimestamp());
} else {
sink.store(bmsg.getId(), bmsg.getPayload().toByteArray());
}
} else {
invalidMessageMeter.mark();
// TODO: sample out an example payload
LOG.warn("Invalid payload for namespace: " + bmsg.getNamespace());
}
} else if (bmsg.getOperation() == Operation.DELETE && bmsg.hasId()) {
sink.delete(bmsg.getId());
}
consumed.mark();
}
} catch (InvalidProtocolBufferException e) {
LOG.error("Invalid protocol buffer in data stream", e);
} catch (UnsupportedEncodingException e) {
LOG.error("Message ID was not in UTF-8 encoding", e);
} catch (IOException e) {
LOG.error("IO error while storing to data sink", e);
} finally {
latch.countDown();
}
return null;
}
}));
}
// run indefinitely unless we detect that a thread exited
try {
while (true) {
latch.await(10, TimeUnit.SECONDS);
if (latch.getCount() != streams.size()) {
// we have a dead thread and should exit
break;
}
}
} catch (InterruptedException e) {
LOG.info("Interrupted during polling", e);
}
// Spit out errors if there were any
for (Future<Void> worker : workers) {
try {
if (worker.isDone() && !worker.isCancelled()) {
worker.get(1, TimeUnit.SECONDS);
}
} catch (InterruptedException e) {
LOG.error("Thread was interrupted:", e);
} catch (ExecutionException e) {
LOG.error("Exception occured in thread:", e);
} catch (TimeoutException e) {
LOG.error("Timed out waiting for thread result:", e);
} catch (CancellationException e) {
LOG.error("Thread has been canceled: ", e);
}
}
}
Aggregations