summaryrefslogtreecommitdiffstats
blob: 8244766c318e899c6e5dcf7dc578299f2c408f81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
 * Copyright (c) 2010-2014, Isode Limited, London, England.
 * All rights reserved.
 */
/*
 * Copyright (c) 2010, Remko Tronçon.
 * All rights reserved.
 */

package com.isode.stroke.streamstack;

import java.util.List;

import com.isode.stroke.base.SafeByteArray;
import com.isode.stroke.signals.Signal;
import com.isode.stroke.signals.Slot1;
import com.isode.stroke.tls.Certificate;
import com.isode.stroke.tls.CertificateVerificationError;
import com.isode.stroke.tls.CertificateWithKey;
import com.isode.stroke.tls.TLSContext;
import com.isode.stroke.tls.TLSContextFactory;

public class TLSLayer extends StreamLayer {

    public TLSLayer(TLSContextFactory factory) {
        context = factory.createTLSContext();
        context.onDataForNetwork.connect(new Slot1<SafeByteArray>() {

            public void call(SafeByteArray p1) {
                writeDataToChildLayer(p1);
            }
        });
        context.onDataForApplication.connect(new Slot1<SafeByteArray>() {

            public void call(SafeByteArray p1) {
                writeDataToParentLayer(p1);
            }
        });
        context.onConnected.connect(onConnected);
        context.onError.connect(onError);
    }

    public void connect() {
        context.connect();
    }

    public void writeData(SafeByteArray data) {
        context.handleDataFromApplication(data);
    }

    public void handleDataRead(SafeByteArray data) {
        context.handleDataFromNetwork(data);
    }

    public boolean setClientCertificate(CertificateWithKey certificate) {
        return context.setClientCertificate(certificate);
    }

    public List<Certificate> getPeerCertificateChain() {
        return context.getPeerCertificateChain();
    }
    
    public Certificate getPeerCertificate() {
        return context.getPeerCertificate();
    }

    public CertificateVerificationError getPeerCertificateVerificationError() {
        return context.getPeerCertificateVerificationError();
    }

    public TLSContext getContext() {
        return context;
    }

    public final Signal onError = new Signal();//needs port
    public final Signal onConnected = new Signal();

    private final TLSContext context;
}